一、进程通信
1、同一主机
1)、古老的通信方式
管道:
无名管道
有名管道
信号
2)、IPC对象通信
消息队列(用的相对少,这里不讨论)
共享内存(*) //最高效
信号量集( ) //信号量
2、不同主机
1)、socket通信
网络通信
3、举例
线程信号:
posix sem_init
特列:
古老的通信方式中,信号是唯一的异步通信
所有的通信方式中,共享内存是最高效的
管道:无名管道、有名管道
无名管道 (pipe):只能给有亲缘关系进程通信
有名管道 (fifo ) :可以给任意单机进程通信(同一主机内)
二、管道通信
1、管道的特性
1)、管道是 半双工的工作模式
2)、所有的管道都是特殊的文件不支持定位操作。
lseek->> fd fseek ->>FILE*
数据流 --- FIFO(first in first out)
3)、管道是特殊文件,读写使用文件IO。
fgets,fread,fgetc,
open,read,write,close;;
2、管道的读写规则
1).读端存在,写管道
管道空:可以写数据
管道满(超过64k):会造成 写阻塞
2).读端不存在,写管道
系统会给进程发一个信号SIGPIPE(管道破裂)
3).写端存在,读管道
管道空,读不到数据,
这时会造成读操作