Linux 程序間通訊和同步(3) 共享記憶體

2021-08-15 16:14:09 字數 680 閱讀 8393

1.建立共享記憶體函式 shmget()

#include#includeint shmget(key_t key,size_t size,int shm***);
shm*** :

ipc_creat : 如果核心中不存在這樣的訊號量,則把他建立出來       

ipc_excl : 與 ipc_creat 一起使用時,如果訊號量已經存在,則操作將失敗,並返回 -1

2.獲得共享記憶體位址函式 shmat()

void *shmat(int shmid, const void *shmaddr, int shm***);
若果 shmaddr 引數值等於 0 ,核心將試著查詢乙個未對映的區域。使用者可以指定乙個位址,但通常該位址只用於訪問所擁有的硬體資源

3.刪除共享記憶體函式 shmdt()

int shmdt(const void *shmaddr);
使用該函式並未真正刪除該記憶體段,只將該記憶體段的應用計數-1, 當該記憶體段的引用計數減為 0 時,核心才真正從刪除該記憶體段。

4.共享記憶體控制函式 shmctl()

int shmctl(int shmid, int cmd,struct shmid_ds *buf);

程序間通訊 和 執行緒間同步

前經常搞混,所以記錄下來。程序間通訊主要是指多個程序間的資料互動。而執行緒間同步主要指維護多個執行緒之間資料準確 一致性。一.程序間通訊主要有以下幾種方式 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 ...

Linux 程序間通訊和同步(1) 管道

半雙工管道 單向通訊 shell 中 管道用 表示 ls l grep c 把 ls l 的輸出當做 grep c 的輸入程序建立管道,每次建立兩個檔案描述符來操作管道,成功返回 0 失敗返回 1 int pipe int filedes 2 侷限性 管道是由核心管理的乙個緩衝區,它的一端連線乙個程...

程序間通訊,同步

程序間通訊 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 named pipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊號量 semophore 訊號量是乙個計數器,可以用來控...