Linux进程间通信(IPC)之上篇

大型应用系统需要众多进程协作。最早的进程间通信是UNIX平台。对UNIX发展作出重大贡献的两大主力是AT&T的贝尔实验室和BSD(加州大学伯克利分校的伯克利软件发布中心)。因此,UNIX进程间通信可以分为:
UNIX IPC包括管道、FIFO、信号。
System V IPC 分为System V 消息队列、System V 信号灯、System V共享内存。
POSIX IPC 包括POSIX消息队列、POSIX信号灯、POSIX共享内存。
Linux进程间通信(IPC)自UNIX平台进程间通信手段继承而来。
#1 linux进程间通信(IPC)的几种手段 #

## # 1.1 管道(Pipe)及有名管道(name Pipe) # ##
    
管道可以用于具有亲缘关系进程间的通信,有名管道客服了管道没有名字的限制。有名管道不考虑进程有没有亲缘关系,允许他们通信。

管道头文件:
 #include

## # 1.2 信号 (Signal)# ##
    
信号与中断的原理类似,是进程间唯一的异步通信进制,可以看作是异步通知,通知接收进程有哪些事情发生了。进程通过信号可以传递附加消息,进程还可以发送信号给自身。
信号来自于硬件或者软件。硬件来源包含键盘或者其他硬件故障,软件来源包含kill函数,alarm、raise、settimer、sigqueue函数和算数异常。


信号头文件:
#include
    
## 1.3 消息队列(Message) ##

也称报文队列,消息队列是消息的链接表。

有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以走队列中的消息。消息队列客服了信号承载信息量少,管道只能承载无格式字节流及缓存区大小受限等缺点。

消息队列头文件:
#include

## 1.4 共享内存 ##

共享内存:共享内存使得多个进程可以访问同一块内存空间,是最快的可用IPC形式,
是针对其他通信机制运行效率较低而设计的。往往与其他通信机制(如信号量)结合使用,来达到进程间的同步和互斥。

## 1.5 信号量 ##
信号量主要作为进程间及同一进程不同线程之间的同步手段。

## 1.6 套接字 ##
套接字可以用于不同计算机之间的进程间通信。

# 2 IPC的三种持续 #

## 2.1 随进程持续 ##
IPC一直存在到打开IPC对象的最后一个进程关闭该对象为止。如管道和有名管道。
## 2.2 随内核持续 ##
IPC一直持续到内核重新自举(上电自检)或者显示删除该对象为止。如消息队列、信号灯以及共享内存等。
## 2.3 随文件系统持续 ##
IPC一直持续到显示删除该对象为止。

# 3.小结 #

本篇是Linux进程间通信(IPC)的上篇。主要介绍Linux IPC的几种手段和IPC的三种持续。这些概念性的东西前人已总结的十分完善,这里提取部分书中的内容归纳一下作为知识储备。

# [参考文献] #
1.Linux C编程/程序员书库, 作者:李玉波, 朱自強, 郭军,清华大学出版社。
2.UNIX网络编程第二卷:进程间通信,作者:W.Richard Stevens,译者:杨继张,清华大学出版社。

你可能感兴趣的:(Linux,IPC)