Linux程序通訊之共享記憶體

2021-06-29 10:35:46 字數 638 閱讀 7596

(一)  建立共享記憶體,使用shmget函式

int shmget ( key_tkey, int size, int shm*** );

返回值:如果成功,返回共享記憶體段識別符號。

如果失敗,則返回- 1:

errno = einval (無效的記憶體段大小)

eexist (記憶體段已經存在,無法建立)

eidrm (記憶體段已經被刪除)

enoent (記憶體段不存在)

eacces (許可權不夠)

enomem (沒有足夠的記憶體來建立記憶體段)

(二)  對映共享記憶體,使用shmat函式

原型:int shmat ( int shmid, char *shmaddr, int shm***);

如果失敗,則返回- 1:

errno = einval (無效的ipc id 值或者無效的位址)

enomem (沒有足夠的記憶體)

eacces (訪問許可權不夠)

(三)  刪除共享記憶體,使用shmdt函式

系統呼叫:shmdt();

呼叫原型:int shmdt( char *shmaddr );

返回值:如果失敗,則返回- 1:

errno= einval (無效的連線位址)

Linux程序通訊之共享記憶體

建立共享記憶體,得到乙個id 函式shmget 使用虛擬位址訪問核心共享記憶體,可以使用任何記憶體函式函式與運算符號 解除安裝虛擬位址 函式shmdt 刪除共享記憶體 函式shctl 修改,獲取共享記憶體的屬性 include include int shmget key t key,size t ...

Linux程序通訊之共享記憶體

擁有夢想是一種智力,實現夢想是一種能力 若是乙個多執行緒的程序,由於各個執行緒共享乙個位址空間,可以直接通過變數的形式進行通訊。而程序,由於各個程序獨佔乙個位址空間,我們需要一種通訊機制來完成程序間的資料互動。本章介紹的是共享記憶體,程序間的通訊機制有以下幾種 無名管道 pipe 有名管道 fifo...

linux程序間通訊之共享記憶體

共享記憶體塊提供了在任意數量的程序之間進行高效雙向通訊的機制。每個使用者都可以讀取寫入資料,但是所有程式之間必須達成並遵守一定的協議,以防止諸如在讀取資訊之前覆寫記憶體空間等競爭狀態的出現。不幸的是,linux無法嚴格保證提供對共享記憶體塊的獨佔訪問,甚至是在您通過使用ipc private建立新的...