Как ждать, пока данные будут записаны на другом конце канала

Я занимаюсь разработкой приложения на C. Родительский и дочерний процессы взаимодействуют через pipe. Перед записью в канал родительский процесс выполняет другие операторы. В примере кода я использовал sleep (10) для задержки. В дочернем процессе он должен читать данные из канала. Но данные не читаются на конце чтения канала в дочернем процессе.

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;
}

Как заставить дочерний процесс ждать, пока данные не будут записаны на другом конце?

Ответы на вопрос(3)

Ваш ответ на вопрос