1

我在子进程中重定向标准输入和标准输出的文件描述符,如下所示。现在我希望子进程等到输入描述符中的数据可用。目前,如果输入描述符中的数据不可用,则子进程会采用一些随机值(我猜是 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);
}
4

1 回答 1

4

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

于 2011-05-09T18:17:36.697 回答