进程间通信指的是用户态的进程之间如何进行同步和交换数据。
Linux内核把对进程间通信的支持以函数的形式进行包装,并在库中以包装函数的形式提供给用户。
1)管道和FIFO(命名管道)
最适合在进程之间实现 生产者/消费者的交互。一些进程向管道中写入数据,而另外一些进程则从管道中读取数据。
管道是进程之间的单向数据流:一个进程向管道写入数据,而后,内核把这些数据重定向到另一个进程,另一个进
程就可以从管道中读取数据。
管道的缺点:无法打开已经存在的管道。除非管道是由一个共同的祖先进程创建,否则任意两个进程不能共享同一
个管道。
FIFO(命名管道):有磁盘索引节点,任何进程都可以访问FIFO。
在Linux中,FIFO和管道几乎是相同的,差别仅在于:
1)FIFO索引节点出现在系统目录树上,而管道是在pipefs特殊文件系统中。
2)FIFO是双向通信管道,而管道是单向的通信信道。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
2)信号量
是个计数器, 用于进程之间的同步。
3)消息
在预定义的消息队列中读和写消息来交换信息(小块数据)。
消息是由固定大小的首部和可变长度的正文组成的。
消息的实现标准有:System V IPC 消息 和 POSIX消息(比System V IPC 有优点)。
4)共享内存区
在共享内存区中交换信息(用于共享大量数据)。
进程通过在其地址空间中映射共享内存区的页框,来访问其中的共享数据。
注意:信号量、消息 和 共享内存区 合称 System V IPC。
---------------------------------------------------------------------------------------------------------------------------------------------------------------
5)套接字
不同计算机或同一台计算机上不同进程之间通信。