讀書筆記 管道通訊 共享記憶體

2021-09-25 23:29:49 字數 1129 閱讀 2706

.程序間通訊(ipc)的方式:有管道(包括無名管道和命名管道),訊息佇列,訊號量,共享儲存,socket,streams等。其中socket和stream支援不通主機上的兩個程序ipc。

無名管道:1.半雙工。具有固定讀端,寫端。2.它只能用於具有親緣關係的程序之間。3. 他可以看作一種特殊檔案,只存在於記憶體當中。

int pipe(int fd) 成功返回0,失敗-1 .當乙個管道建立時,它會建立倆個檔案描述符fd為讀,fd為寫。關閉用close();即可。管道是在核心中的。

.fifo也稱命名管道,它是一種檔案型別。fifo可以在無關的程序之前交換資料,與無名管道不同。fifo有路徑名與之關聯,他以一種特殊裝置檔案形式存在於檔案系統中。

int mkfifo(const char *pathname,mode_t mode);成功返回0,出錯返回-1

mode引數與open函式中的mode相同。如果路徑已經存在會報錯,返回值-1。可以用

eexisrt != errno檢查

【共享記憶體】

建立/開啟共享記憶體,對映,資料,釋放共享記憶體

#include

int shmget(key_t key,size_t size,int flag);建立或獲取乙個共享記憶體,成功返回共享記憶體id失敗返回-1。 共享記憶體的大小必須與兆對齊!

key_t鍵和ftok函式:函式ftok把乙個已存在的路徑名和乙個整數識別符號轉換成乙個key_t值,稱為ipc鍵值(也稱ipc key鍵值)。

ftok函式說明:把從pathname匯出的資訊與id的低序8位組合成乙個整數ipc鍵。

key_t ftok(const char *pathname, int proj_id);proj_id:計畫代號(project id)不能為0。成功:返回key_t值(即ipc 鍵值)出錯:-1,錯誤原因存於error中

void *shmat(int shm_id,const void *add,int flag);連線共享記憶體到當前程序的位址空間。成功返回指向共享記憶體的指標,失敗返回-1

int shmdt(void *addr);斷開與共享記憶體的連線,成功0失敗-1.

int shctl(int shm_id,int cmd,struct shmid_ds *buf);控制共享記憶體的相關資訊;成功返回0,失敗返回-1.

APUE讀書筆記 高階程序通訊(管道)

假設我們要將乙個檔案的資料,通過more程式來顯示 但不希望建立臨時檔案,即先複製整個檔案,再用more來展示 我們可以把檔案的資料塞入乙個管道,more程式 由子程序excel啟動 讀這些資料,並顯示在螢幕上 和直接more乙個檔案有啥區別?include apue.h include defin...

APUE讀書筆記 程序通訊

程序通訊 1,管道 pipe 在理解管道時需要注意的地方 管道是半雙工的,不能假設它是全雙工的。它只能用在有公共祖先的程序之間。比如shell幾個命令之間用管道連線,但父程序都是終端程序。1.1 管道的建立 include int pipe int filedes 2 管道一般用在有共同祖先的程序間...

(讀書筆記)volatile記憶體語義

volatile變數自身具有下列特性 可見性。對乙個volatile變數的讀,總是能看到 任意執行緒 對這個volatile變數最後的寫入。原子性。對任意單個volatile變數的讀 寫具有原子性,單類似volatile 變數這種復合操作不具有原子性。當寫乙個volatile變數時,jmm會把該執行...