Cómo esperar hasta que los datos se escriban en el otro extremo de la tubería

Estoy desarrollando una aplicación en C. El proceso padre e hijo se comunica a través de la tubería. Antes de escribir en pipe, el proceso padre ejecuta otras instrucciones. En el código de ejemplo, he usado sleep (10) para hacer un retraso. En el proceso hijo, debe leer los datos de la tubería. Pero los datos no se leen en el extremo leído de la tubería en el proceso hijo.

int main()
{
    int pid;
    FILE *fp;
    fp = fopen("test.txt","w");
    char *buff;
    int fd[2];
    int count = 0 ;
    pipe(fd);
    pid = fork();
    if(pid == 0)
    {
        close(fd[1]);
        ioctl(fd[0], FIONREAD, &count);
        fprintf(fp,"Value of count: %d ",count);
        buff = malloc(count);
        fprintf(fp,"\n TIME before read: %s",__TIME__);
        read(fd[0], buff, count);
        fprintf(fp,"\nbuffer: %s\n TIME after read %s", buff, __TIME__);
    }
    else{
        close(fd[0]);
        sleep(10);    //delay caused by application specific code replaced with sleep
        write(fd[1],"THIS is it",10);
    }
    fclose(fp);
    return 0;
}

¿Cómo hacer que el proceso hijo espere hasta que los datos se escriban en el otro extremo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta