進(jìn)程間通信(6)-IPC通信之共享內(nèi)存

1撵儿、共享內(nèi)存在內(nèi)核中是什么樣子的乘客?

它是一塊緩存,類似于用戶空間的數(shù)組或malloc函數(shù)分配的空間一樣统倒,只不過(guò)是在內(nèi)核空間寨典。

2、共享內(nèi)存的特點(diǎn)

  • 共享內(nèi)存創(chuàng)建之后房匆,一直存在于內(nèi)核中,直到被刪除或系統(tǒng)關(guān)閉报亩;

  • 共享內(nèi)存和管道不一樣浴鸿,讀取后,內(nèi)容仍在其共享內(nèi)存中弦追。

3岳链、 shmget函數(shù):打開(kāi)或創(chuàng)建共享內(nèi)存

shmget函數(shù)

例1:通過(guò)IPC_PRIVATE創(chuàng)建共享內(nèi)存

#include "sys/types.h"
#include "sys/shm.h"
#include "signal.h"
#include "unistd.h"
#include "stdio.h"
#include "stdlib.h"
int main()
{
    int shmid;
    shmid = shmget(IPC_PRIVATE,128,0777);
    if(shmid <0)
    {
        printf("creat share memory failure\n");
        return -1;
    }
    printf("create share memory success, shmid=%d\n", shmid);
    system("ipcs -m");
    // system("ipcrm -m shmid");
    return 0;
}

通過(guò)用戶空間的ipcs命令,可以看到內(nèi)核空間的ipc對(duì)象劲件。

ipcs:查看ipc對(duì)象
    ipcs -m:查看共享內(nèi)存
    ipcs -q:查看消息隊(duì)列
    ipcs -s:查看信號(hào)燈
ipcrm:刪除ipc對(duì)象
    ipcrm -m ID號(hào):刪除共享內(nèi)存
    ipcrm -q ID號(hào):刪除消息隊(duì)列
    ipcrm -s ID號(hào):刪除信號(hào)燈
ipcrm -m ID號(hào)

例2:通過(guò)ftok的返回值創(chuàng)建共享內(nèi)存

4掸哑、 ftok:創(chuàng)建key值

char ftok(const char *path, char key)
參數(shù):第一個(gè)參數(shù):文件路徑和文件名约急;
     第二個(gè)參數(shù):一個(gè)字符。
返回值:正確返回一個(gè)key值苗分,出錯(cuò)返回-1

IPC_PRIVATE操作時(shí)厌蔽,共享內(nèi)存的key值都一樣,都是0摔癣,所以使用ftok來(lái)創(chuàng)建key值奴饮。只要key值是一樣的,用戶空間的進(jìn)程通過(guò)這個(gè)函數(shù)打開(kāi)择浊,則會(huì)對(duì)內(nèi)核的同一個(gè)IPC對(duì)象操作戴卜。

5、shmat:將共享內(nèi)存映射到用戶空間的地址中

能不能用read ,write呢琢岩?
為了方便用戶空間對(duì)共享內(nèi)存的操作投剥,使用地址映射的方式。

void *shmat(int shmid, const void *shmaddr, int shmflg);   //malloc
參數(shù):第一個(gè)參數(shù):ID號(hào)担孔;
     第二個(gè)參數(shù):映射到的地址薇缅;NULL為系統(tǒng)自動(dòng)完成的映射;
     第三個(gè)參數(shù)shmflg: SHM_RDONLY共享內(nèi)存只讀
                          默認(rèn)是0攒磨,表示共享內(nèi)存可讀寫(xiě)泳桦。
返回值:成功:映射后的地址;
失斆溏帧:NULL灸撰。

6、shmdt:將進(jìn)程(用戶空間)里的地址映射刪除拼坎。

int shmdt(const void *shmaddr);
參數(shù):shmaddr共享內(nèi)存映射后的地址
返回值:成功:0
       出錯(cuò):-1

7浮毯、shmctl:刪除共享內(nèi)存對(duì)象(內(nèi)核)

函數(shù)原型:int shmctl(int shmid,  int cmd,  struct shmid_ds  *buf);
函數(shù)參數(shù):shmid:要操作的共享內(nèi)存標(biāo)識(shí)符。
         cmd : IPC_STAT  (獲取對(duì)象屬性)---  實(shí)現(xiàn)了命令ipcs -m
                IPC_SET (設(shè)置對(duì)象屬性)
                IPC_RMID (刪除對(duì)象)   ---實(shí)現(xiàn)了命令ipcrm -m
         buf :指定IPC_STAT/IPC_SET時(shí)用以保存/設(shè)置屬性泰鸡。
函數(shù)返回值:成功:0
           出錯(cuò):-1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末债蓝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子盛龄,更是在濱河造成了極大的恐慌饰迹,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件余舶,死亡現(xiàn)場(chǎng)離奇詭異啊鸭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)匿值,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)赠制,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人挟憔,你說(shuō)我怎么就攤上這事钟些⊙毯牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵政恍,是天一觀的道長(zhǎng)汪拥。 經(jīng)常有香客問(wèn)我,道長(zhǎng)抚垃,這世上最難降的妖魔是什么喷楣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮鹤树,結(jié)果婚禮上铣焊,老公的妹妹穿的比我還像新娘。我一直安慰自己罕伯,他們只是感情好曲伊,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著追他,像睡著了一般坟募。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上邑狸,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天懈糯,我揣著相機(jī)與錄音,去河邊找鬼单雾。 笑死赚哗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的硅堆。 我是一名探鬼主播屿储,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼渐逃!你這毒婦竟也來(lái)了够掠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茄菊,失蹤者是張志新(化名)和其女友劉穎疯潭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體买羞,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡袁勺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了畜普。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡群叶,死狀恐怖吃挑,靈堂內(nèi)的尸體忽然破棺而出钝荡,到底是詐尸還是另有隱情,我是刑警寧澤舶衬,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布埠通,位于F島的核電站,受9級(jí)特大地震影響逛犹,放射性物質(zhì)發(fā)生泄漏端辱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一虽画、第九天 我趴在偏房一處隱蔽的房頂上張望舞蔽。 院中可真熱鬧,春花似錦码撰、人聲如沸渗柿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)朵栖。三九已至,卻和暖如春柴梆,著一層夾襖步出監(jiān)牢的瞬間陨溅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工绍在, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留门扇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓揣苏,卻偏偏與公主長(zhǎng)得像悯嗓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卸察,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容