共享記憶體區是最快的ipc形式。一旦這樣的記憶體對映到共享它的程序的位址空間,這些程序間資料傳遞不再涉及到核心,換句話說是程序不再通過執行進入核心的系統呼叫來傳遞彼此的資料。
共享記憶體的資料結構
共享記憶體相關函式
引數含義
key共享記憶體段名字
size
共享記憶體大小
shm***
由九個許可權標誌構成,它們的用法和建立檔案時使用的mode標誌是一樣的
shmid
:共享記憶體標識
shmadder
指定連線的位址
cmd將要採取的動作
buf指向乙個儲存著共享記憶體的模式狀態和訪問許可權的資料結構
接下來,我們利用上面的函式實現乙個client/server通訊的例子
makefile
comm.h.phony:all
all:client
server
client:client.c comm.c
gcc -o $@ $^
server:server.c comm.c
gcc -o $@ $^
.phony:clean
rm -f client
server
comm.c1
#ifndef _comm_h__
2#define _comm_h__34
#include
5#include
6#include
7#include
8#include
9#include
1011
int creatshm(int size);
12int destroyshm(int shmid);
13int getshm(int size);
1415
#endif
server.c1 #include "comm.h"
23 static int shm(int
size,int flag)
4 11int shmid=shmget(key,size,flag);
12if(shmid<0)
13
17return shmid;
18 }
19int creatshm(int
size)
20 23int getshm(int
size)
24 27int destroy(int shmid)
28 34return
0; 35 }
client.c1
#include "comm.h"23
int main()
4 14 shmdt(msg);
15sleep(2);
16 destroy(shmid);
17return
0; 18 }
1
#include "comm.h"23
int main()
4 17 shmdt(msg);
18sleep(2);
19return
0; 20 }
Linux程序間通訊 共享記憶體
共享記憶體是執行在同一臺機器上的程序間通訊最快的方式,因為資料不需要在不同的程序間複製。通常由乙個程序建立一塊共享記憶體區,其餘程序對這塊記憶體區進行讀寫。共享記憶體往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。首先要用的函式是shmget,它獲得乙個共享儲存識別符號。i nclu...
Linux程序間共享記憶體通訊
使用共享記憶體基本分四個步驟 獲得共享記憶體 shmget 對映共享記憶體shmat 解除對映shmdt 刪除共享記憶體shmctl 於是自己在網上找來了乙個例子看了下,並且用虛擬機器單獨跑了下共享記憶體的經典例程看了下,才知道了自己的問題出現 了 發現有時候只要自己親自將程式一步一步的去測,才知道...
Linux程序間通訊 共享記憶體
之前提到了程序間通訊的管道,訊息佇列,訊號量,然後其中訊號量是pv操作,操控的是乙個共享資源。在我們提到的ipc模組中,訊息佇列針對的是資料單元的資訊傳送,管道不屬於system v ipc的部分,所以按照乙個作業系統的整體來說,他應該也有著乙個關於位元組流的訊息傳輸,並且要比之前都要快,還要跟我們...