读书人

Unix网络编程-进程间通信-管道通讯

发布时间: 2013-10-08 16:32:36 作者: rapoo

Unix网络编程--进程间通信--管道通信

所有式样的Unix都提供管道,它由 pipe 函数创建,提供一个单路(单向)数据流。

原型如下:


注意:其实上面这张图说明的道理没有问题,但是图的画法确实是存在问题的。因为管道是单向传输数据流的,所以,当有两个不同的进程进行通信时,需要的是两个管道协同合作,而不是上图的画法。我们可以考虑一种情况,当父进程或者是子进程往管道里写入数据,因为管道里只要有数据就可以读出,所以,如果这时如果父进程或者是子进程读管道中的数据,那么读出的可能就是刚刚写入的数据,这样,就没能完成通信的任务。

所以,如果要实现通信,正确的步骤是:

(1)创建管道1( fd1[0] 和 fd1[1] )和管道( fd2[0] 和 fd2[1] )

(2)fork;

(3)父进程关闭管道1的读出端

(4)父进程关闭管道2的写入端

(5)子进程关闭管道1的写入端

(6)子进程关闭管道2的读出端

完成了以上步骤就好像下面这张图这样:

Unix网络编程-进程间通信-管道通讯


例子:

现在描述一个客户端-服务器的例子。main 函数创建两个管道并用 fork 生成一个子进程。客户然后作为父进程运行,服务器则作为子进程运行。第一个管道用于从客户向服务器发送路径名,第二个管道用于从服务器向客户发送该文件的内容(或者是一个出错消息),这样设置完毕后就得到下图所示的情形:

Unix网络编程-进程间通信-管道通讯

下面请看实现的实例程序:

mainpipe.c


由此可见,利用管道实现了进程间通信。

读书人网 >编程

热点推荐