从父进程管道到子进程并返回

莫娜莫纳德

我发现了很多与此类似的问题(例如https://www.quora.com/How-can-I-write-a-code-for-PIPE-in-C-shell-script-python),在这些问题描述的情况下有效,但由于某种原因不适用于我的情况。到目前为止,我找到的答案涉及从一个孩子到另一个孩子的管道输出(上述括号中的链接)或从孩子到父母/父母到孩子。我想要做的是让父母能够写入孩子的标准输入并从其标准输出中读取。或者,在更一般的情况下,给定一些孩子,让父级写入第一个孩子的 STDIN,这会将其输出通过管道传输到第二个孩子,第二个孩子将其输出通过管道传输到第三个,依此类推,直到最后一个child 将其输出通过管道返回给 parent。那是,prog0 | prog1 | prog 2 | ...来自 C/C++ 代码。我目前的一半尝试(一半是因为我只是在echo尝试使用简单的东西尝试完整输入/输出之前尝试的 STDOUT读取cat -)看起来像这样(为了简洁省略了一些错误检查):

void test() {
    int pipe_fds[2];
    pid_t cpid, wpid;
    int status;
    char buf[16] = {0};

    status = pipe(pipe_fds);
    cpid = fork();
    if (cpid == 0) {
        dup2(pipe_fds[1], STDOUT_FILENO);
        close(pipe_fds[0]);
        execlp("echo", "Hello world!", NULL);
        printf("Child returned abnormally: %d\n", errno);
        _exit(3);
    }

    close(pipe_fds[1]);
    wpid = waitpid(cpid, &status, 0);
    printf("Waited on pid %d, which exited with %d\n", wpid, WEXITSTATUS(status));
    read(pipe_fds[0], buf, 16);
    printf("Child said: %s\n", buf);
    close(pipe_fds[0]);

    exit(0);
}

这会运行,但父级没有从子级获得可见输出。我将如何解决这个问题,更重要的是,我将如何像我之前提到的那样通过管道进出一系列流程?

威廉·珀塞尔

在这种情况下,问题在于您对 execlp 的调用。尝试

execlp("echo", "echo", "Hello world!", NULL); 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从父父进程到子进程的管道不起作用

来自分类Dev

将输入\输出管道从父进程重定向到cmd子进程C / C ++ WinApi

来自分类Dev

无法从父进程到子进程获取数据

来自分类Dev

创建子进程时,是否有必要将数据从父进程复制到子进程?

来自分类常见问题

如何从父进程获取子进程

来自分类Dev

将数据从父进程传递到其子进程-IPC,UNIX

来自分类Dev

杀死子管道进程的父进程

来自分类Dev

子进程未读取管道

来自分类Dev

子进程之间的管道

来自分类Dev

子进程管道终端输入?

来自分类Dev

从父进程向C中的子进程发送信号

来自分类Dev

网络摄像头从父进程流到子进程

来自分类Dev

从父进程的子进程接收调试函数的输出

来自分类Dev

获取从父进程创建的所有子/孙进程的 pid

来自分类Dev

子进程的返回值

来自分类Dev

Python子进程返回-11

来自分类Dev

Python子进程未返回

来自分类Dev

具有多个管道的Python子进程

来自分类Dev

Python子进程因命名管道而挂起

来自分类Dev

Python ffmpeg子进程:管道损坏

来自分类Dev

Python子进程因命名管道而挂起

来自分类Dev

使用fork:从父级访问子进程内存

来自分类Dev

在运行时从父终端临时禁用子进程

来自分类Dev

在运行时从父终端临时禁用子进程

来自分类Dev

将字符从父级发送到子级进程,并在C中将字符数返回给父级

来自分类Dev

子Shell进程双向重定向到父进程

来自分类Dev

Node.js 子进程到 Python 进程

来自分类Dev

如何使用C从父进程向子进程发送信号?

来自分类Dev

bg中shell的fork子进程是否从父进程接收到SIGSTOP信号?