首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2013-10-08 
Unix网络编程--进程间通信--管道通信所有式样的Unix都提供管道,它由 pipe 函数创建,提供一个单路(单向)数

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


      

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

热点排行