什麼是程序間通訊?程序間通訊有哪幾種方式?下面就針對這兩個問題進行簡單的梳理。
1. 程序間通訊 / ipc
1.1 為什麼作業系統要提供給程序間通訊方式給使用者?
1.2 通訊場景
1.3 程序間通訊方式
2. 管道:用於程序間的資料傳輸
2.1 匿名管道
2.2 命名管道
【 匿名與命名區別】
匿名:只能用於具有親緣關係的程序間通訊(沒有識別符號);
命名:可用於任意同一主機程序間通訊(識別符號是乙個管道檔案)。
【管道特性】
半雙工通訊;
管道的生命週期隨程序;
管道自帶同步與互斥;
管道提供位元組流傳輸服務;
3. 共享記憶體:用於程序間的資料共享
【實現原理】
在物理記憶體中開闢一塊空間----這塊空間在核心中是具有標識的;
將這塊空間通過頁表對映到自己的虛擬位址空間中;
通過虛擬位址進行記憶體操作;
解除對映關係;
刪除共享記憶體。
//1.在物理記憶體中開闢一塊空間
int shmget(key_t key, size_t size, int shm***)
; key:共享記憶體在核心中的標識,其它程序通過相同的標識開啟同乙個記憶體
size:共享記憶體大小
shm***:標誌位 ipc_creat | ipc_excl
返回值:成功返回共享記憶體的操作控制代碼,失敗返回 -1
//2.對映
void *shmat(int shmid, const void *shmaddr, int shm***)
;shmid:操作控制代碼
shm***:當前對映方式
返回值:錯誤返回(void*)-1
//3.解除對映關係
int shmdt(const void *shmaddr)
; //傳入對映首位址
//4.刪除共享記憶體
int shmctl(int shmid, int cmd, struct shmid_ds *buf)
;shmid:操作控制代碼
cmd:對齊所要的操作 常用:ipc_rmtid 刪除共享記憶體
struct shmid_ds *buf:獲取或buf設定,取決於cmd
4. 訊息佇列:用於程序間的資料塊傳輸
【實現原理】
【特性】
訊息佇列自帶同步與互斥;
傳輸有型別的資料塊;
資料不會粘連;(即兩條資料不會粘到一起傳送)
生命週期隨核心。
5. 訊號量:用於實現程序間的同步與互斥
【訊號的pv原語】
Linux程序間通訊
程序間通訊 ipc interprocess communication 基本機制 訊號 管道及命名管道 訊息佇列 共享主存 訊號量 套接字。訊號 全稱軟中斷訊號,是在軟體層次上對中斷機制的一種模擬,它也是程序間通訊機制中唯一的非同步通訊機制。linux訊號處理函式可分為訊號安裝函式 訊號傳送函式和...
Linux程序間通訊
謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...
Linux程序間通訊
謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...