C語言程序間通訊(四) 共享記憶體

2021-09-01 17:18:18 字數 1422 閱讀 5788

共享記憶體通訊方式效率最高,畢竟是直接操作記憶體,但是要保證多個程序對同一塊記憶體訪問的同步互斥比較麻煩,借助訊號量實現

對每個共享儲存段,核心維護乙個shmid_ds型別的結構體,定義在檔案中

struct shmid_ds

共享記憶體基本操作

1,建立或開啟乙個共享記憶體(shmget)

//create_shm.c

#include#include#include#include#define bufsz 1024

int main()

printf("create shared memory succeed: %d\n",shm_id);

system("ipcs -m"); //檢視共享記憶體id

return 0;

}

2,附加共享記憶體到程序空間(shmat/shmdt)

//attach_shm.c

#include#include#include#include#define bufsz 1024

int main()

printf("attach shared memory succeed: %d\n",*shm);

system("ipcs -m"); //檢視共享記憶體呼叫狀態

if(shmdt(shm) == -1)

system("ipcs -m"); //檢視共享記憶體呼叫狀態

return 0;

}

3,共享記憶體控制函式(shmctl)

下面寫個簡單的例子

共享記憶體寫端(write_shm.c)

//write_shm.c

#include#include#include#includetypedef struct

people;

int main()

for(i=0;i<5;i++)

if(shmdt(p_shm) == -1)

return 0;

}

共享記憶體讀端(read_shm.c)

//read_shm.c

#include#include#include#includetypedef struct

people;

int main()

for(i=0;i<5;i++)

if(shmdt(p_shm) == -1)

return 0;

}

先後編譯執行"寫**"與"讀**",結果如下

root$ ./write_shm.out 

root$ ./read_shm.out

name:b age:20

name:c age:21

name:d age:22

name:e age:23

name:f age:24

程序間通訊 共享記憶體

下面是自己寫的乙個簡單的共享記憶體的程序間通訊的例子。共享記憶體是用於程序間大量資料共享的一種方法。include include include include include include int main if buf1 shmat shmid,0,0 void 1 strcpy buf1,...

程序間通訊 共享記憶體

共享記憶體是被多個程序共享的一部分物理記憶體。共享記憶體是程序間共享資料的一種最快的方式,乙個程序向共享記憶體區域寫入資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容。共享記憶體實現分兩個步驟 建立共享記憶體,使用shmget函式 對映共享記憶體,使用shmat函式 共享記憶體是一種最為高...

程序間通訊 共享記憶體

共享記憶體允許兩個或更多程序共享一塊給定的儲存區,因為資料不需要在不同程序之間訪問,這是最快的一種ipc 傳輸資訊量很大,通過記憶體空間對映程序空間實現,若伺服器程序正在將資料放入共享儲存區,則在它做完這一操作之前,客戶程序不應取這些資料,通常訊號量用來實現對共享儲存訪問的同步。核心為每個共享儲存段...