Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 正在等待来自文件描述符的输入_C_File Descriptor_Child Process - Fatal编程技术网

C 正在等待来自文件描述符的输入

C 正在等待来自文件描述符的输入,c,file-descriptor,child-process,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(f

我在子进程中重定向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);
}

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

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

我几乎不会调用EOF“一些随机值”,尤其是当您将stdin显式设置为空文件时。我几乎不会调用EOF“一些随机值”,尤其是当您将stdin显式设置为空文件时。