一、通讯的目的:
1.数据传输
一个进程需要将数据发送给另外一个进程。
2.资源共享
多个进程之间共享同样的资源。
3.通知事件
一个进程需要向一个/组进程发送信息,来通知它们发生了某事件。
4.进程控制
有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道他们的状态。
二、linux进程间通讯(IPC interprocess communication)由以下几个部分发展而来
1.UNIX进程间的通讯
2.基于System V 进程间的通讯
3.POSIX进程间的通讯
POSIX (Portable Operating System Interface)表示可移植操作系统的接口。
三 、 IPC之间的通讯方式
1.有名管道
(FIFO) 。。。。。。。。。。。。。。。。。。。。。。主要用于事件通知
2.无名管道(pipe) 。。。。。。。。。。。。。。。。。。。。。。。主要用于事件通知
3.信号(Signal) 。。。。。。。。。。。。。。。。。。。。。。。。主要用于事件的通知
4.消息队列
5.共享内存
6.信号量 。。。。。。。。。。。。。。。。。。。。。。。。。。。 主要用于资源共享
7.共享内存(socket)
四、管道通信:
一个进程在管道的尾部写入数据,另一个进程从管道的头部读出数据。管道包括有名管道和无名管道,
无名管道只能用于用于父子进程之间的通讯,有名管道可以用于同一系统中的任何两个进程的通讯。
五、管道通信的特点:
1、管道通讯是单向的,有固定的读端和写端
2、数据被进程从管道读出来后,在管道中的该数据就不存在
3、当进程去读空管道时,该进程会阻塞
4、当进程向满管道写入数据时,该进程会阻塞
5、管道容量为64Kb
五、无名管道:
在linux系统中,无名管道一旦创建完成后,操作无名管道将相当于操作文件。无名管道的读端被视为一个文件;无名管道的写端也被认为一个文件。
六、无名
管道操作:
1.创建一个管道
int pipe(int pipefd[2]
)
pipefd[0]:指向管道的读端