Доброго времени суток. С-но вопрос, делаю простейший вывод в FIFO
char fifoName[]="testfifo"; //имя файла FIFO
void write_FIFO()
{
unlink(fifoName);
FILE *cfp;
int ret;
ret = mknod(fifoName, S_IFIFO | 0600, 0);
cfp = fopen(fifoName,"w");
//if(cfp == NULL)
//fprintf(stderr, "ERROR: Ошибка работы с FIFO\n" );
int value=1000;
int rt=fprintf(cfp,"%d\n",value);
printf("write %d from child on fifo \n", value);
value=2000;
fprintf(cfp,"%d",value);
printf("write %d \n", value);
//fflush(cfp);
exit(0);
}
void read_FIFO()
{
FILE *pfp;
pfp = fopen(fifoName,"r");
if(pfp == NULL)
fprintf(stderr, "ERROR:\tОшибка работы с FIFO\n" );
int result;
int value;
while(result=fscanf(pfp,"%d",&value)>0)
{
printf("This is the parent. Received value %d from child on fifo \n", value);
}
if(result < 0)
fprintf(stderr, "ERROR:\t ошибка работы с FIFO\n" );
fclose(pfp);
}
int main()
{
pid_t pid, pid2;
pid=fork();
printf("pid=%d\n", pid);
switch(pid)
{
case 0:
pid2=fork();
switch(pid2)
{
case 0:
write_FIFO();
break;
default:
//waitpid(pid2,0,0);
read_FIFO();
unlink(fifoName); /* Delete the created fifo */
break;
}
break;
default:
waitpid(pid,0,0);
exit(0);
break;
}
}
Этот пример работает, проблема начинается, если я пытаюсь раскомментировать строку waitpid(pid2,0,0) - тогда чтение зависает. Дело в том, что в моей программе нужно реализовать ожидание процесса, а как только я делаю это, программа сразу зависает на чтении. Подскажите пожалуйста, почему это происходит и куда копать?