天天看點

共享記憶體通訊

1、基本概念

共享記憶體是IPC機制中的一種,它允許兩個不相關的程序通路同一段記憶體,這是傳遞資料的一種非常有效地方式。

共享記憶體通訊

2、函數學習

1)建立和打開共享記憶體:

函數名:shmget

函數原型:Int shmget(key_t key,size_t size,int shmflg);

頭檔案:<sys/ipc.h>、<sys/shm.h>

函數功能:建立或者擷取共享記憶體并傳回其描述符id

傳回值:成功則傳回建立或者擷取到的共享記憶體的描述符,失敗:傳回-1。

參數說明:key共享記憶體的鍵值,size:共享記憶體的大小,shmflg打開标志,如果使用了IPC_CREAT這個标志,則會新建立一塊共享記憶體。

2)映射共享記憶體

函數名:shmat

函數原型:Void *shmat(int shmid , const void *shmaddr,int shmflg);

函數功能:把shmid指定的共享記憶體映射到程序的位址空間裡

所屬頭檔案:<sys/types.h>、<sys/shm.h>

傳回值:成功:傳回映射到程序空間之後的記憶體位址。 失敗:傳回-1

參數說明:Shmid:指明要映射的共享記憶體的描述符,Shmaddr:指定映射之後的位址。通常把它設定為NULL,表明讓Linux系統自動的選擇映射位址。Shmflg:标志

共享記憶體通訊

3)分離共享記憶體

函數名:Shmdt

函數原型:Int shmdt(const void *shmaddr);

函數功能:從程序位址空間中斷掉與共享記憶體之間的聯系。

傳回值:成功:傳回0,失敗:傳回-1

參數說明:Shmaddr:要斷開的共享記憶體的映射位址。

4)删除共享記憶體

函數名:Shmctl

函數原型:Int shmctl(int shmid,int cmd,struct shmid_ds *buf);

函數功能:控制共享記憶體

所屬頭檔案:<sys/ipc.h>、<sys/shm.h>

傳回值:成功:根據不同的操作傳回不同的值,失敗:傳回-1

參數說明:Shmid:要控制的共享記憶體的id,Cmd:決定執行什麼樣的控制操作,如IPC_RMID(表示删除),Buf:擷取Linux中描述共享記憶體的struct_ds結構,基本不使用,一般使它為0。

A程序:1、建立共享記憶體;2、映射共享記憶體;3、分離共享記憶體;4、删除共享記憶體。

B程序:1、擷取共享記憶體;2、映射共享記憶體;3、分離共享記憶體。

共享記憶體通訊

write程序:1、建立共享記憶體;2、映射共享記憶體;3.1、擷取使用者輸入字元串;3.2、把字元串放入共享記憶體;3.3、循環做直到終止;6、脫離共享記憶體。

read程序:1、建立/擷取共享記憶體;2、映射共享記憶體;3、循環:a、列印共享記憶體字元串直到收到結束的通知。4、脫離共享記憶體;5、删除共享記憶體。

 write.c檔案

共享記憶體通訊
共享記憶體通訊
共享記憶體通訊

read.c

共享記憶體通訊
共享記憶體通訊

先運作read,再運作write。