基本概念:
大多数重要的程序都涉及进程间通信(Interprocess Communication,IPC)。这是受下述设计原则影响的自然结果:把应用程序设计为一组互相通信的小片段比将其设计为单个庞大的程序更好。
ICP主要有四种形式:
(1)消息传递(管道、FIFO和消息队列);
(2)同步(互斥量、条件变量、读写锁、文件和记录锁、信号量);
(3)共享内存(匿名的和具名的);
(4)远程过程调用(Solaris门和sun RPC)
ICP对象的持续性:
我们可以把任意类型的IPC的持续性(persistence)定义成该类型的一个对象一直存在多长时间。图1-2展示了三种类型的持续性。
(1)随进程持续的IPC对象一直存在到打开该对象的最后一个进程关闭该对象为止。例如管道和FIFO就是这种对象。
(2)随内核持续的IPC对象一直存在到内核重新自举或显式删除该对象为止。例如Posix的消息队列、信号量和共享内存必须至少是随内核持续的,但也可以是随文件系统持续的。
(3)随文件系统持续的IPC对象一直存在到显式删除该对象为止。例如Posix的消息队列、信号量和共享内存区如果是使用映射文件实现的,那么它们就是随文件系统持续的。
图1-3汇总了各种类型IPC对象的持续性。
名字空间:
当两个或多个无亲缘关系的进程使用某种类型的IPC对象来彼此交换信息时,该IPC对象必须有一个某种形式的名字(name)或标识符(identifer),这种其中一个进程可以创建该IPC对象,其余进程则可以指定同一个IPC对象。
管道没有名字(因此不能用于无亲缘关系的进程间),但是FIFO有一个文件系统中的路径名作为其标识(因此可用于无亲缘关系的进程间)。
fork、exec和exit对IPC对象的影响:
我们需要理解fork、exec和_exit函数对于所讨论的各种形式的IPC的影响,图1-6对此作了总结。
例子汇总:
消息传递:
IPC之管道详解
IPC之FIFO(有名管道)详解
IPC之管道和FIFO的额外属性
IPC之Posix消息队列详解
同步:
linux多线程之互斥锁
linux多线程之读写锁
linux多线程之条件变量
IPC之记录锁详解
IPC之Posix信号量详解
共享内存:
IPC之Posix内存映射文件详解
IPC之Posix共享内存详解
原文出自:http://blog.csdn.net/daiyudong2020/article/details/52420009
参考:《unix网络编程》·卷2
End;