通常,在一个用户计算机上会同时运行多个程序,而一个程序会有多个任务要完成,需要各个任务之间协同工作,所以需要完成进程间的通讯。
进程间的通讯方式有:管道,信号量,共享内存,消息队列,socket套接字等
不同的是,前几种通讯方式都是在单机上进行,而socket套接字是在多个机子之间进行,此篇博客先对管道进行一些讲解。
管道在进程间传递数据(A进程将数据传递给B进程)
管道分为 :有名管道(命令管道) 用mkfifo 创建,既是命令也是一个库函数
在磁盘上会存在一个管道文件标识,但是管道文件并不占用磁盘空间(占一个inode)数据会缓存在内存上,有名管道可以应用于同一台的主机上的有权限访问的任意n个进程间的通讯。
在俩个进程之间,用open和write和read等一系列库函数进行操作,open有同步,需要一读一写才能打开,管道为空,读阻塞
管道写端关闭,读,read返回值为0;管道读端关闭,写,异常 ——>SIGPIPE
无名管道 :父子进程之间,打开就创建好
有名和无名的区别?
有名:
1、任意俩进程之间通信
2、写入管道的数据在内存中存放,有名管道的文件大小为0;(在磁盘中存储)
3、半双工通讯
无名
1、只在父子进程之间通讯
2、半双工通讯
单工:发送方只能发送,接收方只能接受
半双工:可以是接受方和发送方,但是同一时刻不能既是接受方和发送方(对讲机)
全双工:同一时刻可以既是接受方和发送方(打电话)