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 中使用管道的进程间通信的主要内容,如果未能解决你的问题,请参考以下文章