Linux程序間通訊

2021-10-04 22:30:41 字數 1749 閱讀 9270

// 讀管道

ssize_t read

(int fd,

void

*buf, size_t count)

;// 寫管道

ssize_t write

(int fd,

const

void

*buf, size_t count)

;

寫端關閉了

寫管道

讀端關閉了

有乙個磁碟檔案, 某個程序通過呼叫乙個函式mmap可以在當前程序的虛擬位址空間中申請一塊記憶體, 將磁碟檔案中的內容對映到這塊記憶體中. 這塊記憶體就叫記憶體對映區

兩個程序通過記憶體對映區實現程序間通訊, 每個程序中都有一塊屬於自己的記憶體對映區

記憶體對映區, 需要乙個塊記憶體, 哪兒的記憶體?

建立記憶體對映區

#include

// 建立記憶體對映區

void

*mmap

(void

*addr, size_t length,

int prot,

int flags,

int fd, off_t offset)

;引數:

- addr: 要建立的記憶體對映區的起始位址,

null

-> 委託核心指定

- length: 要建立的記憶體對映區大小, 假設寫100

, 實際得到的是4k

- 這個長度實際是4k的整數倍

- 這個長度必須要大於0

- 如果引數指定為100

, 實際得到記憶體對映區4k, 剩餘3996會被填充為0

, 這部分資料是可以合理訪問的

- prot: 對記憶體對映區資料的操作許可權

- prot_exec: 對對映區資料有執行許可權

- prot_read:..

....

....

...讀許可權, 常用

- prot_write:..

....

....

..寫許可權, 常用

- prot_none:..

....

....

...沒有任何許可權

- flags: 對映區的屬性

- map_shared: 共享對映區, 如果是想程序間通訊必須要指定這個值

- map_private: 對映區是私有的, 不能實現程序間通訊

- fd: 通過開啟乙個磁碟檔案, 得到了這個檔案描述符, 這個磁碟檔案資料被對映到記憶體對映區

- offset: 進行對映的時候, 檔案的偏移量, 這個值必須是4k的整數倍, 不偏移指定為0

返回值:

成功: 得到建立的記憶體對映區的起始位址

失敗: map_failed [

(void*)

-1]

釋放記憶體對映區

// 釋放記憶體對映區

intmunmap

(void

*addr, size_t length)

;引數:

- addr: 要是釋放的記憶體對映區的起始位址, mmap的返回值

- length: 建立的記憶體對映區的大小, 和mmap的第二個引數值相等即可

返回值:

成功:0, 失敗:

-1

Linux程序間通訊

程序間通訊 ipc interprocess communication 基本機制 訊號 管道及命名管道 訊息佇列 共享主存 訊號量 套接字。訊號 全稱軟中斷訊號,是在軟體層次上對中斷機制的一種模擬,它也是程序間通訊機制中唯一的非同步通訊機制。linux訊號處理函式可分為訊號安裝函式 訊號傳送函式和...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...