IPC do UNIX / Linux: leitura de um pipe. Como saber o comprimento dos dados em tempo de execução?

Eu tenho um processo filho que gera alguma saída de comprimento variável e, em seguida, envia para o pai usando um half duplex pipe. No pai, como eu uso a função read ()? Como os dados podem ser de comprimento diferente a cada vez, como posso saber, em tempo de execução, o tamanho dos dados para fazer qualquer malloc () para um buffer? A função fstat () pode ser usada em um descritor de arquivo de pipe?

Eu sei que a função read () irá ler um número especificado de bytes, mas retornará 0 se o final do arquivo (não o caractere EOF) for alcançado antes dos bytes solicitados terem sido lidos.

Estou executando especificamente o Ubuntu GNU / Linux com um kernel 2.6.27-9.

Todos os exemplos da Programação Avançada de Richard Stevens no Ambiente UNIX especificaram o comprimento de dados durante a gravação no canal ou confiaram na função fgets () stdio.h. Desde que eu estou preocupado com a velocidade, eu quero ficar longe de usar stdio.h, tanto quanto possível.

Isso será necessariamente mais rápido com a memória compartilhada?

Obrigado, -Dhruv

questionAnswers(6)

yourAnswerToTheQuestion