Ожидание ввода из файлового дескриптора - PullRequest
1 голос
/ 09 мая 2011

Я перенаправляю файловые дескрипторы для stdin и stdout в дочернем процессе следующим образом. Теперь я хочу, чтобы дочерний процесс ждал, пока данные не будут доступны во входном дескрипторе. В настоящее время, если данные не доступны во входном дескрипторе, тогда дочерний процесс принимает некоторое случайное значение (я думаю, EOF) и завершается.

fd0=open("in1.dat", O_RDWR|O_CREAT);
fd1=open("out1.dat", O_RDWR|O_CREAT);
if(pid==0)
    {
    dup2(fd0, 0); // redirect input to the file
    dup2(fd1, 1); // redirect output to the file
    execlp("./flip","flip","new","4",NULL);
}

1 Ответ

4 голосов
/ 09 мая 2011

Чтение из файлового дескриптора будет блокироваться до тех пор, пока данные не станут доступны (если вы не согласитесь, чтобы чтение было неблокирующим). В вашем случае, если файл пуст, тогда чтение действительно вернет 0, чтобы указать конец файла, и ничего не записать в буфер (так что случайное значение, которое вы видите, там, что было до того, как вы вызвали чтение). Если вы хотите обрабатывать входной файл как конвейер (например, вы хотите, чтобы дочерний процесс ждал, пока кто-то еще не записывает данные в файл), тогда вы хотите сделать входной файл fifo, а не обычным файлом. (например, используйте mknod вместо open.)

...