等待文件描述符的输入

时间:2011-05-09 17:56:59

标签: c file-descriptor child-process

我正在重定向子进程中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 个答案:

答案 0 :(得分:4)

从文件描述符读取将阻塞,直到数据可用(除非您安排读取为非阻塞)。在您的情况下,如果文件为空,那么读取确实会返回0以指示文件结束并且什么都不写入缓冲区(因此您看到的随机值是您在调用read之前的任何内容)。如果您想将输入文件视为管道(例如,您希望子项等待其他人将数据写入文件),那么您希望将输入文件设置为fifo而不是常规文件。 (例如,使用mknod而不是open。)