进程通信-无名管道

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程通信-无名管道相关的知识,希望对你有一定的参考价值。

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

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

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

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

    下面我们来看一下:无名管道的创建,写入,读取,关闭(我用的的是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]);

     技术分享

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

     技术分享

     技术分享

     技术分享

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

     技术分享

     

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

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

进程间通信—无名管道通信

进程间通信的方式

进程之间通信之有名管道无名管道(pipe),笔记

linux进程间通信之一:无名管道

Linux系统编程进程间通信之无名管道

进程间通信(无名管道)