Linux 中使用管道的进程间通信

Posted

技术标签:

【中文标题】Linux 中使用管道的进程间通信【英文标题】:Interprocess communication using pipe in Linux 【发布时间】:2013-08-10 05:48:09 【问题描述】:

我已经编写了用于在 linux 中写入数字以进行管道传输的代码。如下,但显示错误,谁能帮我解决这个问题。

基本上该程序的问题陈述如下:- 一个程序将打开一个管道,将一个数字写入管道。 - 其他程序将打开相同的管道,将读取数字并打印它们。 - 关闭两个管道

int main()


int number;




FILE *fout;

fout = popen("  ","w");



pclose(fout);

return 0;


现在我的问题是我应该在 popen 命令选项中给出什么命令(如上图所示的空白),以便我可以继续往下写一个数字到管道。

【问题讨论】:

你有两个不同的程序,还是同一个程序分叉一个进程并通过管道通信? 问题与***.com/q/18087047/841108非常相似! 【参考方案1】:

首先,使用 mknod 命令创建一个命名管道。 mknod pipe p。然后像文件一样使用函数进行读写。也可以使用代码创建节点,使用mknod 函数。查找错误代码EEXIST。更多信息在这里。 http://linux.die.net/man/2/mknod

【讨论】:

我认为这个练习不是关于命名管道,即 FIFO,而是关于 pipe(2) 我猜pipe 用于父母派生一个孩子,并且他们都访问管道,在父母和孩子处,管道的一端是封闭的,具体取决于要求。我对 program 而不是 process 感到困惑,认为它是两个不同的可执行文件,因此建议使用命名管道。 One program will open a pipe, write a number to pipe. - Other program will open the same pipe, will read the number and print them【参考方案2】:

您不太了解 IPC 和管道的工作原理;请阅读一本好书:Advanced Linux Programming 有几个章节讨论这些问题。

我们没有时间来解释这些好书所涵盖的困难概念。花几个小时阅读它们!

库函数popen(3) 运行一个命令。很可能,您的系统上没有p 命令。我猜 fp 是 NULL 并且 errno 已设置。

popen 正在使用pipe(2)、fork(2)、dup2(2)、execve(2) 和/bin/sh -c

【讨论】:

以上是关于Linux 中使用管道的进程间通信的主要内容,如果未能解决你的问题,请参考以下文章

Linux进程间通信

Linux 进程间通信-管道

Linux进程间通信 -- 使用命名管道

linux系统进程间通信方式:管道

Linux进程间通信——管道

Linux环境进程间通信:管道及有名管道