1.建立/開啟已存在共享記憶體區——shmget()
shmget(key, size, flag);
返回記憶體區標識號。
2.對映共享記憶體區和程序虛擬位址空間——shmat()
shmat(id, addr, flag);
返回對映位址。
id:由shmget()返回,用來標識某共享記憶體區。
flag:規定對此區是否是唯讀等性質。
3.斷開對映——shmdt()
shmdt(addr);
4.控制對共享記憶體區的各種操作——shmctl()
shmctl(id, cmd, shmstatbuf);
id:shmget()返回的標識號。
cmd:要進行的操作型別,如ipc_rmid刪除共享記憶體區。
shmstatbuf:乙個結構體,用來修改或獲取記憶體區當前狀態,當cmd為ipc_rmid時,設定為null。
寫者程式
#include #include #include #include #include #define shmkey 741
int shmid;
int main()
}
讀者程式
#include #include #include #include #include #define shmkey 741
int shmid;
int main()
///delete shared memory section
shmctl(shmid, ipc_rmid, null);
return 0;
}
Linux程序間通訊 共享記憶體
共享記憶體是執行在同一臺機器上的程序間通訊最快的方式,因為資料不需要在不同的程序間複製。通常由乙個程序建立一塊共享記憶體區,其餘程序對這塊記憶體區進行讀寫。共享記憶體往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。首先要用的函式是shmget,它獲得乙個共享儲存識別符號。i nclu...
Linux程序間共享記憶體通訊
使用共享記憶體基本分四個步驟 獲得共享記憶體 shmget 對映共享記憶體shmat 解除對映shmdt 刪除共享記憶體shmctl 於是自己在網上找來了乙個例子看了下,並且用虛擬機器單獨跑了下共享記憶體的經典例程看了下,才知道了自己的問題出現 了 發現有時候只要自己親自將程式一步一步的去測,才知道...
Linux程序間通訊 共享記憶體
之前提到了程序間通訊的管道,訊息佇列,訊號量,然後其中訊號量是pv操作,操控的是乙個共享資源。在我們提到的ipc模組中,訊息佇列針對的是資料單元的資訊傳送,管道不屬於system v ipc的部分,所以按照乙個作業系統的整體來說,他應該也有著乙個關於位元組流的訊息傳輸,並且要比之前都要快,還要跟我們...