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