2011-05-09 68 views
1

我正在將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

我幾乎不會調用EOF「一些隨機值」,尤其是當您將stdin明確設置爲空文件時。 – 2011-05-10 02:52:52

回答

4

從文件描述符讀取將阻塞直到數據可用(除非您安排讀取爲非阻塞)。在你的情況下,如果文件是空的,那麼一個讀操作確實會返回0來表示文件結束並且不向緩衝區寫入任何內容(所以你在那裏看到的隨機值就是在你調用read之前有的值)。如果您想將輸入文件視爲管道(例如,您希望孩子等待,直到其他人將數據寫入文件),那麼您希望將輸入文件設爲fifo而不是常規文件。 (例如,使用mknod而不是打開)。