linux进程间通信主要分为以下4个领域
(1)消息传递(管道,FIFO,消息队列)
(2)同步(互斥锁,条件变量,读写锁,信号量)
(3)共享内存区(匿名共享内存区,有名共享内存区)
(4)过程调用(Solaris门,Sun RPC)
linux进程间的信息共享可以分为
(1) 基于文件系统的共享
(2) 基于内核的共享
(3) 基于共享内存区的共享
IPC对象的持续性
(1)随进程间持续的IPC对象一直存在到打开着该对象的最后一个进程关闭该对象的最后一个进程关闭该对象为止。
(2)随内核持续的IPC对象一直存在到内核重新自举或显式删除该对象为止。
(3)随文件系统持续的IPC对象一直存在到显示删除该对象为止。即使系统自举了,该对象还是存在的。
IPC类型 持续性
管道 随进程
FIFO 随进程
Posix互斥锁 随进程
Posix条件变量 随进程
Posix读写锁 随进程
fcntl记录上锁 随进程
Posix消息队列 随内核
Posix有名信号量 随内核
Posix基于内存的信号量 随进程
Posix共享内存区 随内核
System V消息队列 随内核
System V信号量 随内核
System V共享内存区 随内核
TCP套接字 随进程
UDP套接字 随进程
Unix域套接字 随进程
名字空间:
当两个或多个无亲缘关系的进程使用某种类型的IPC对象来彼此交换信息时,该IPC对象必须有一个某种形式的名字或者标识符,这样其中一个进程(往往是服务器)可以创建该IPC对象,其余进程则可以指定同一个IPC对象。
IPC类型 用于打开或创建IPC的名字空间 IPC打开后的标识
管道 没有名字 描述符
FIFO 路径名 描述符
Posix互斥锁 没有名字 pthread_mutex_t指针
Posix条件变量 没有名字 pthread_cond_t指针
Posix读写锁 没有名字 pthread_rwlock_t指针
fcntl记录上锁 路径名 描述符
Posix消息队列 Posix IPC名字 mqd_t值
Posix有名信号量 Posix IPC名字 sem_t指针
Posix基于内存的信号量 没有名字 sem_t指针
Posix共享内存区 Posix IPC名字 描述符
System V消息队列 key_t键 System V IPC标识符
System V 信号量 key_t键 System V IPC标识符
System V共享内存区 key_t键 System V IPC 标识符
门 路径名 描述符
sun RPC 程序/版本 RPC句柄
TCP套接字 IP地址与TCP 端口 描述符
UDP套接字 IP地址与UDP端口 描述符
Unix域套接字 路径名 描述符