码迷,mamicode.com
首页 > 系统相关 > 详细

进程通信-无名管道

时间:2016-05-27 20:27:17      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

  无名管道:主要是针对进程通信的(自己感觉它有很大的局限性)

    特点:它不是一个文件系统,不能按名访问,这也是它和有名管道之间最大的区别。无名管道只是一个系统内存里面的东西。

       半双工模式,数据只能流向一个方向(老师给我们举得例子就是水厂的水到居民用水,不可能倒着流对吧).

       进程之间通信,但是只能是有亲缘关系的进程才能进行通信?比如父子进程:因为在父子进程中,子进程拷贝父进程的数据段,这让这两个进程在通信的时候就有了相连的关系。

    下面我们来看一下:无名管道的创建,写入,读取,关闭(我用的的是Liunx系统CentOS)

    技术分享

    技术分享

     这个函数是创建一个管道,将建成功函数的返回值是0,否则失败就是返回-1,并返回错误编号,errno.

     在创建这个无名管道的时候,定义一个数组,大小为2,里面是用来存放句柄的(文件描述符).

     无名管道有一个读端,pipefd[0]---------------------read(fd,buf,sizeof(buf));read函数呢是系统的读函数,将文件里面的东西读到buf里面,注意在使用无名管道进行进程之间通信的时候,我们需要调用的是系统的内核函数,不能调用库函数。

     技术分享

     无名管道有一个写端,pipefd[1]---------------------write(fd,buf,sizeof(buf));write函数呢是系统的写函数,将buf里面的东西写到文件里面。

     技术分享

     下一步就是关闭读端和写端。close(fd[0]),close(fd[1]);

     技术分享

     我自己写了一个无名管道的例子:

     技术分享

     技术分享

     技术分享

     这个程序是子进程写数据,父进程读数据,这样来实现进程之间的通信。运行结果是:

     技术分享

     

     这是我写的一个很见到的程序,我也是一个新手,肯定有许多的不足之处,也请大家能提提好的建议。

进程通信-无名管道

标签:

原文地址:http://www.cnblogs.com/xhlcn/p/5535747.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!