進程間通信之共享內存(一)
時間:2016-12-30作者:華清遠見
1.共享內存概述共享內存允許兩個或更多進程共享一給定的存儲區。因為數據不需要在各個進程之間復制,所以這是快的一種進程間通信方式。使用共享內存時的關鍵點在于如何在多個進程之間對一給定的存儲區進行同步訪問。 例如若一個進程正在將數據放入共享內存區,則在它做完這一操作之前,其他進程不應該去取這些數據。通常,信號量被用來實現對共享內存訪問的同步。 2.函數說明共享內存的實現分為4個步驟。
第一步是創建共享內存,這里用到的函數是shmget,也就是從內存中獲得一段共享內存區域。 3.函數格式以上函數用到的頭文件如下所示。
#include <sys/types.h> shmget函數的語法 函數原型
int shmget( key_t key, /* IPC_PRIVATE */ 函數返回值
成功:共享內存段標識符 shmat函數的語法 函數原型
char *shmat( int shmid, /* 要映射的共享內存區標識符 */ 函數返回值
成功:被映射的段地址 shmdt函數的語法 函數原型 int shmdt(const void *shmaddr) /* 被映射的共享內存段地址 */ 函數返回值
成功:0 shmctl函數的語法 函數原型
int shmctl(int shmid, /* 要操作的共享內存區標識符 */ 函數返回值
成功:0 4.使用實例首先使用shmget函數,首先創建一個共享內存區,之后將其映射到本進程中,后再解除這種映射關系并刪除創建的共享內存。 這里要介紹的一個命令是ipcs,這是用于報告進程間通信機制狀態的命令,它可以查看共享內存、消息隊列等各種進程間通信機制的情況,這里使用了system函數用于調用命令ipcs,參考代碼如下所示:
/*創建共享內存*/ 發表評論
|