fread会不会停止阅读,以便继续进行另一个过程?

时间:2018-03-29 20:27:55

标签: c pipe exec posix stdio

在我的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进程将在读取所有数据之前进入后台?

0 个答案:

没有答案