Как ждать, пока данные будут записаны на другом конце канала
Я занимаюсь разработкой приложения на 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;
}
Как заставить дочерний процесс ждать, пока данные не будут записаны на другом конце?