亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

Hi,歡迎來(lái)到嵌入式培訓(xùn)高端品牌 - 華清遠(yuǎn)見(jiàn)教育科技集團(tuán)<北京總部官網(wǎng)>,專(zhuān)注嵌入式工程師培養(yǎng)15年!
當(dāng)前位置: > 華清遠(yuǎn)見(jiàn)教育科技集團(tuán) > 嵌入式學(xué)習(xí) > 講師博文 > 進(jìn)程間通信之共享內(nèi)存(一)
進(jìn)程間通信之共享內(nèi)存(一)
時(shí)間:2016-12-30作者:華清遠(yuǎn)見(jiàn)

1.共享內(nèi)存概述

共享內(nèi)存允許兩個(gè)或更多進(jìn)程共享一給定的存儲(chǔ)區(qū)。因?yàn)閿?shù)據(jù)不需要在各個(gè)進(jìn)程之間復(fù)制,所以這是快的一種進(jìn)程間通信方式。使用共享內(nèi)存時(shí)的關(guān)鍵點(diǎn)在于如何在多個(gè)進(jìn)程之間對(duì)一給定的存儲(chǔ)區(qū)進(jìn)行同步訪問(wèn)。

例如若一個(gè)進(jìn)程正在將數(shù)據(jù)放入共享內(nèi)存區(qū),則在它做完這一操作之前,其他進(jìn)程不應(yīng)該去取這些數(shù)據(jù)。通常,信號(hào)量被用來(lái)實(shí)現(xiàn)對(duì)共享內(nèi)存訪問(wèn)的同步。

2.函數(shù)說(shuō)明

共享內(nèi)存的實(shí)現(xiàn)分為4個(gè)步驟。

第一步是創(chuàng)建共享內(nèi)存,這里用到的函數(shù)是shmget,也就是從內(nèi)存中獲得一段共享內(nèi)存區(qū)域。 
        第二步是映射共享內(nèi)存,也就是把這段創(chuàng)建的共享內(nèi)存映射到具體的進(jìn)程空間去。這里使用的函數(shù)是shmat。 
        第三步是撤銷(xiāo)映射的操作,其函數(shù)為shmdt。 
        第四步是刪除創(chuàng)建的共享內(nèi)存,用到的函數(shù)是shmctl。

3.函數(shù)格式

以上函數(shù)用到的頭文件如下所示。

#include <sys/types.h>
        #include <sys/ipc.h>
        #include <sys/shm.h>

shmget函數(shù)的語(yǔ)法

函數(shù)原型

int shmget( key_t key, /* IPC_PRIVATE */
        int size, /* 共享內(nèi)存區(qū)大小 */
        int shmflg) /* 同open函數(shù)的權(quán)限位,也可以用8進(jìn)制表示法 */

函數(shù)返回值

成功:共享內(nèi)存段標(biāo)識(shí)符 
        出錯(cuò):-1

shmat函數(shù)的語(yǔ)法

函數(shù)原型

char *shmat( int shmid, /* 要映射的共享內(nèi)存區(qū)標(biāo)識(shí)符 */
        const void *shmaddr, /* 將共享內(nèi)存映射到指定位置(若為0則表示把該段共享內(nèi)存映射到調(diào)用進(jìn)程的地址空間)*/
        int shmflg) /* SHM_RDONLY :共享內(nèi)存只讀 
        默認(rèn)0 :共享內(nèi)存可讀寫(xiě)*/

函數(shù)返回值

成功:被映射的段地址 
        出錯(cuò):-1

shmdt函數(shù)的語(yǔ)法

函數(shù)原型

int shmdt(const void *shmaddr) /* 被映射的共享內(nèi)存段地址 */

函數(shù)返回值

成功:0 
        出錯(cuò):-1

shmctl函數(shù)的語(yǔ)法

函數(shù)原型

int shmctl(int shmid, /* 要操作的共享內(nèi)存區(qū)標(biāo)識(shí)符 */
        int cmd, /*IPC _RMID : 刪除共享內(nèi)存 
        IPC_STAT : 獲取共享內(nèi)存屬性 
        IPC_SET : 設(shè)置共享內(nèi)存屬性 */
        struct shmid_ds *buf) /* 指向保存共享內(nèi)存屬性的結(jié)構(gòu)體的指針*/

函數(shù)返回值

成功:0
        出錯(cuò):-1

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)存*/
        int shmid;
        void *shmadd;
        if ((shmid = shmget(IPC_PRIVATE,BUFSZ,0666)) < 0 )
    
        perror(“fail to shmget ”); 
        exit(-1);
    }
        syetem(“ipcs –m”); 
        
/*映射共享內(nèi)存*/
        if ((shmadd = shmat(shmid,0,0)) == NULL )
    
        perror(“fail to shmat ”); 
        exit(-1);
    }
        syetem(“ipcs –m”); 
        /*刪除共享內(nèi)存*/
        if (shmdt(shmadd) < 0 )
    {
        perror(“fail to shmdt ”); 
        exit(-1);
    }
        syetem(“ipcs –m”); 
        if (shmctl(shmid, IPC_RMID, NULL) < 0 )
    {
        perror(“fail to shmctl ”); 
        exit(-1);
    } 
        syetem(“ipcs –m”);

發(fā)表評(píng)論
評(píng)論列表(網(wǎng)友評(píng)論僅供網(wǎng)友表達(dá)個(gè)人看法,并不表明本站同意其觀點(diǎn)或證實(shí)其描述)
主站蜘蛛池模板: 欧美性xx18hd | 亚洲特黄 | 国产成人a在一区线观看高清 | 激情五月黄色 | 久草精品视频在线观看 | 国产一区二区三区久久精品 | 成人无遮挡毛片免费看 | 激情6月丁香婷婷色综合 | 亚洲天天综合 | 午夜影院三级 | 欧美人成一本免费观看视频 | 天天干天天草 | 天天都色 | 欧美性受一区二区三区 | 理论片久久 | 国产欧美三级 | 澳门a毛片免费观看 | 黄色三区 | 秋霞日韩理论高清在线观看 | 国产高清一| 中文字幕欧美日韩 | 日本国产网站 | 国产精品久久久久久久久久久久 | 国产拍揄自揄精品视频网站 | 另类在线视频 | 日韩高清一区二区 | 精品视频日本 | 国产精品夜夜春夜夜 | 亚洲最大视频网站 | 亚洲免费视频在线观看 | 欧美一区二 | 欧美亚洲另类视频 | 全国最大色成免费网站 | 精品欧美一区二区在线观看 | 人人揉揉揉人人捏人人看 | 精品无码三级在线观看视频 | 久久亚洲综合 | 天天草天天干天天 | 免费jizz在线播放视频 | 久操视频在线播放 | 亚洲日本香蕉视频 |