子进程和父进程之间使用pipe()进行管道通信

瓦伦

我试图建立一个管道,以使用pipe()在子进程和父进程之间进行通信。我读了一些关于stackoverflow的帖子,其中一些使用dup()和dup2()函数。有人可以解释在这种情况下这些功能的用途吗?

熊猫人1234

您可以用来dup2分别重定向子进程和父进程的stdin和stdout,以通过与指令创建的文件描述符一起使用的管道发送消息pipe为了更具体地说明其功能,下面是有关如何执行此操作的详细示例。

#include <unistd.h>
#include <stdio.h>
#define READ 0
#define WRITE 1
int main (int argc, char * argv [ ] )
{ 
    int fd[2];
    pipe(fd); // creating an unnamed pipe
    if (fork() !=0)
    { 
        close(fd[READ]); // Parent close the reading descriptor
        dup2(fd[WRITE], 1); // copy fd[WRITE]] in the descriptor 1 (stdout)
        close (fd[WRITE]); // closing the writing descriptor, not needed anymore because of stdout
        if(execlp(argv[1], argv[1], NULL) ==-1) // execute the program writer passed as an argument to myprog
            perror("error in execlp");
    }
    else // child process (reader)
    { 
        // closing unused writing descriptor
        close(fd[WRITE]);
        // copy fd[READ] in descriptor 0 (stdin)
        dup2(fd[READ],0);
        close (fd[READ]); // closing reading descriptor, not needed anymore because of stdin
        // execute reading command
        if(execlp(argv[2], argv[2], NULL) == -1) // Execute the reader passed as an argument to myprog
            perror("connect");
    }
    return 0 ;
}

这样,父进程通过标准输出发送的每个消息都将被重定向到子进程的标准输入例如,执行命令myprog who wc(使用上面显示的代码)时,其行为就像who | wc在终端中一样。您可以看到我的父进程whowc通过标准输出将消息发送到

因为是dup之间的区别dup2您可以查看此链接

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用两个管道在父进程和子进程之间进行通信

来自分类Dev

Linux在C中使用管道在父进程和子进程之间传递值?

来自分类Dev

Linux在C中使用管道在父进程和子进程之间传递值?

来自分类Dev

子进程之间的管道

来自分类Dev

在Node.js中的两个子进程之间进行管道传输?

来自分类Dev

Linux中Python父进程与C子进程之间的通信

来自分类Dev

使用stdin和stdout在2个进程之间进行通信

来自分类Dev

Unix管道是否仅限在两个进程之间使用?

来自分类Dev

我可以在C中两个子进程之间使用相同的管道吗?

来自分类Dev

如何在Process.Start中的两个进程之间使用管道

来自分类Dev

主进程和渲染进程之间的通信

来自分类Dev

accton(psacct)记录的CPU时间-父进程和子进程之间记录的时间关系

来自分类Dev

管道似乎无法在exec()覆盖的fork()进程之间进行通信

来自分类Dev

使用stdout / stderr以外的管道与子进程进行通信

来自分类Dev

使用管道与多线程程序中的子进程进行通信

来自分类Dev

Pipe,Fork和Exec-父子进程之间的双向通信

来自分类Dev

在NodeJ进程之间使用npm缓存

来自分类Dev

如何使用广播接收器在android和另一个进程之间进行通信

来自分类Dev

杀死子管道进程的父进程

来自分类Dev

在父子进程之间创建管道

来自分类Dev

Delphi-较低级和较高级进程之间的进程间通信

来自分类Dev

在多个子进程之间通过C中的管道通信数据(UNIX环境)

来自分类Dev

使用fork和MPI进行多进程编程之间的区别

来自分类Dev

在fork调用子进程和父进程之后,值的区别是什么?

来自分类Dev

如何在两个进程之间使用AIDL发送图像?

来自分类Dev

如何通过子进程在NodeJS和Python(pynput)之间进行通信

来自分类Dev

父进程始终在子进程之后打印输出

来自分类Dev

如何使用windbg调试子进程和父进程?

来自分类Dev

在子进程运行和通信时终止子进程,这些子进程通过队列进行清晰的通信

Related 相关文章

  1. 1

    使用两个管道在父进程和子进程之间进行通信

  2. 2

    Linux在C中使用管道在父进程和子进程之间传递值?

  3. 3

    Linux在C中使用管道在父进程和子进程之间传递值?

  4. 4

    子进程之间的管道

  5. 5

    在Node.js中的两个子进程之间进行管道传输?

  6. 6

    Linux中Python父进程与C子进程之间的通信

  7. 7

    使用stdin和stdout在2个进程之间进行通信

  8. 8

    Unix管道是否仅限在两个进程之间使用?

  9. 9

    我可以在C中两个子进程之间使用相同的管道吗?

  10. 10

    如何在Process.Start中的两个进程之间使用管道

  11. 11

    主进程和渲染进程之间的通信

  12. 12

    accton(psacct)记录的CPU时间-父进程和子进程之间记录的时间关系

  13. 13

    管道似乎无法在exec()覆盖的fork()进程之间进行通信

  14. 14

    使用stdout / stderr以外的管道与子进程进行通信

  15. 15

    使用管道与多线程程序中的子进程进行通信

  16. 16

    Pipe,Fork和Exec-父子进程之间的双向通信

  17. 17

    在NodeJ进程之间使用npm缓存

  18. 18

    如何使用广播接收器在android和另一个进程之间进行通信

  19. 19

    杀死子管道进程的父进程

  20. 20

    在父子进程之间创建管道

  21. 21

    Delphi-较低级和较高级进程之间的进程间通信

  22. 22

    在多个子进程之间通过C中的管道通信数据(UNIX环境)

  23. 23

    使用fork和MPI进行多进程编程之间的区别

  24. 24

    在fork调用子进程和父进程之后,值的区别是什么?

  25. 25

    如何在两个进程之间使用AIDL发送图像?

  26. 26

    如何通过子进程在NodeJS和Python(pynput)之间进行通信

  27. 27

    父进程始终在子进程之后打印输出

  28. 28

    如何使用windbg调试子进程和父进程?

  29. 29

    在子进程运行和通信时终止子进程,这些子进程通过队列进行清晰的通信

热门标签

归档