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