我正在重定向子进程中 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);
}
最佳答案
从文件描述符读取将阻塞直到数据可用(除非您安排读取是非阻塞的)。在您的情况下,如果文件为空,那么读取确实会返回 0 以指示文件结束并且不会向缓冲区写入任何内容(因此您看到的随机值是您调用读取之前的任何值)。如果您希望将输入文件视为管道(例如,您希望 child 等待直到其他人将数据写入文件),那么您希望将输入文件设为 fifo 而不是常规文件。 (例如,使用 mknod 而不是打开。)
关于c - 等待来自文件描述符的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5940632/