进程间通讯——管道

        通常,在一个用户计算机上会同时运行多个程序,而一个程序会有多个任务要完成,需要各个任务之间协同工作,所以需要完成进程间的通讯。

        进程间的通讯方式有:管道,信号量,共享内存,消息队列,socket套接字等

        不同的是,前几种通讯方式都是在单机上进行,而socket套接字是在多个机子之间进行,此篇博客先对管道进行一些讲解。

        管道在进程间传递数据(A进程将数据传递给B进程)

        管道分为   :有名管道(命令管道)    用mkfifo  创建,既是命令也是一个库函数

       在磁盘上会存在一个管道文件标识,但是管道文件并不占用磁盘空间(占一个inode)数据会缓存在内存上,有名管道可以应用于同一台的主机上的有权限访问的任意n个进程间的通讯。

        在俩个进程之间,用open和write和read等一系列库函数进行操作,open有同步,需要一读一写才能打开,管道为空,读阻塞

管道写端关闭,读,read返回值为0;管道读端关闭,写,异常  ——>SIGPIPE

                           无名管道 :父子进程之间,打开就创建好

         有名和无名的区别?

 有名:

扫描二维码关注公众号,回复: 5759159 查看本文章

     1、任意俩进程之间通信

     2、写入管道的数据在内存中存放,有名管道的文件大小为0;(在磁盘中存储)

    3、半双工通讯

无名

  1、只在父子进程之间通讯

  2、半双工通讯

 

单工:发送方只能发送,接收方只能接受

半双工:可以是接受方和发送方,但是同一时刻不能既是接受方和发送方(对讲机)

全双工:同一时刻可以既是接受方和发送方(打电话)

 

 

猜你喜欢

转载自blog.csdn.net/xxy_08/article/details/88989406