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域套接字 路徑名 描述符