在我的main函数中,我调用fork 3次(总是在父进程中)。子进程使用匿名管道进行通信,并使用execlp
运行其他程序。如果一个程序在运行dup2(fd[1],STDOUT_FILENO)
之后开始将一些数据写入管道的写入端(程序认为它写入stdout)并且使用fread在管道的另一端读取它(exec运行的程序是从stdin读取但我在运行dup2(fd[0],STDIN_FILENO)
之前使用execlp
从管道读取)fread函数是否可能中途停止阅读?可以询问我在写入时使用的写入系统调用 - 是否有可能在中途停止写入?
修改
关于程序运行方式的一些说明:
pipe(fd);
p2 = fork();
if (p2 > 0)
p3=fork();
if (p2==0){
dup2(fd[1],STDOUT_FILENO);
//close all file descriptors here
execlp("./p2","p2",NULL);
/*program that prints to stdout after taking stdin input
like this : write(STDOUT_FILENO,stuff,stuff_size*/
}
if (p3==0){
dup2(fd[0],STDIN_FILENO);
//close all file descriptors here
execlp("./p3","p3",NULL);/*program that takes stdin input
like this :fread(foo,sizeof(foo_t),1,stdin);*/
}
问题: 我的fread函数是否有可能在中途停止读取,p3进程将在读取所有数据之前进入后台?