c - 等待来自文件描述符的输入

标签 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);
}

最佳答案

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

关于c - 等待来自文件描述符的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5940632/

相关文章:

linux - 判断两个fd是否重复?

github - 为GitHub Pages设置Jekyll环境

node.js - 如何在我自己的服务器上托管 gatsby(例如 Express)并在我需要时构建网站

node.js - 如何在不使用阻塞 stdio 的情况下从 node.js 中的子进程传输/流式传输大数据?

c - 通用 C 函数的字符串比较函数

c - 为什么C中的char指针可以是char数组

c - 寻找简单算法的大 O

c++ - 从 C 回调调用 C++ 方法

python-3.x - 为什么 select.select 告诉我它不可读

c - 使用写入将整数写入文件描述符?