Linux 程序間通訊

2021-10-23 05:22:45 字數 1426 閱讀 1551

什麼是程序間通訊?程序間通訊有哪幾種方式?下面就針對這兩個問題進行簡單的梳理。

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.管道與...