青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開(kāi)心的工作
簡(jiǎn)單、開(kāi)放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

linux 共享內(nèi)存的使用

Posted on 2012-01-02 23:36 S.l.e!ep.¢% 閱讀(2286) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Unix

使用共享內(nèi)存的目的:
?共享內(nèi)存共享內(nèi)存是進(jìn)程間通信中最簡(jiǎn)單的方式之一。
?共享內(nèi)存允許兩個(gè)或更多進(jìn)程訪(fǎng)問(wèn)同一塊內(nèi)存,就如同 malloc() 函數(shù)向不同進(jìn)程返回了指向同一個(gè)物理內(nèi)存區(qū)域的指針。
?當(dāng)一個(gè)進(jìn)程改變了這塊地址中的內(nèi)容的時(shí)候,其它進(jìn)程都會(huì)察覺(jué)到這個(gè)更改。
使用共享內(nèi)存的流程:
?1.進(jìn)程必須首先分配它。
?2.隨后需要訪(fǎng)問(wèn)這個(gè)共享內(nèi)存塊的每一個(gè)進(jìn)程都必須將這個(gè)共享內(nèi)存綁定到自己的地址空間中。
?3.當(dāng)完成通信之后,所有進(jìn)程都將脫離共享內(nèi)存,并且由一個(gè)進(jìn)程釋放該共享內(nèi)存塊。
分配:
?int segment_id = shmget (shm_key, int size , shmflag );
?1.進(jìn)程通過(guò)調(diào)用shmget(Shared Memory GET,獲取共享內(nèi)存)來(lái)分配一個(gè)共享內(nèi)存塊。 該函數(shù)的第一個(gè)參數(shù)是一個(gè)用來(lái)標(biāo)識(shí)共享內(nèi)存塊的鍵值。
?彼此無(wú)關(guān)的進(jìn)程可以通過(guò)指定同一個(gè)鍵以獲取對(duì)同一個(gè)共享內(nèi)存塊的訪(fǎng)問(wèn)。
?不幸的是,其它程序也可能挑選了同樣的特定值作為自己分配共享內(nèi)存的鍵值,從而產(chǎn)生沖突。
?用特殊常量IPC_PRIVATE作為鍵值可以保證系統(tǒng)建立一個(gè)全新的共享內(nèi)存塊。
?2.該函數(shù)的第二個(gè)參數(shù)指定了所申請(qǐng)的內(nèi)存塊的大小。
?因?yàn)檫@些內(nèi)存塊是以頁(yè)面為單位進(jìn)行分配的,實(shí)際分配的內(nèi)存塊大小將被擴(kuò)大到頁(yè)面大小的整數(shù)倍。
?3.第三個(gè)參數(shù)是一組標(biāo)志,通過(guò)特定常量的按位或操作來(lái)shmget。這些特定常量包括:
?IPC_CREAT:
??這個(gè)標(biāo)志表示應(yīng)創(chuàng)建一個(gè)新的共享內(nèi)存塊。通過(guò)指定這個(gè)標(biāo)志,我們可以創(chuàng)建一個(gè)具有指定鍵值的新共享內(nèi)存塊。
?IPC_EXCL:
??這個(gè)標(biāo)志只能與 IPC_CREAT 同時(shí)使用。當(dāng)指定這個(gè)標(biāo)志的時(shí)候,如果已有一個(gè)具有這個(gè)鍵值的共享內(nèi)存塊存在,則shmget會(huì)調(diào)用失敗。
??也就是說(shuō),這個(gè)標(biāo)志將使線(xiàn)程獲得一個(gè)“獨(dú)有”的共享內(nèi)存塊。如果沒(méi)有指定這個(gè)標(biāo)志而系統(tǒng)中存在一個(gè)具有相通鍵值的共享內(nèi)存塊,
??shmget會(huì)返回這個(gè)已經(jīng)建立的共享內(nèi)存塊,而不是重新創(chuàng)建一個(gè)。
?模式標(biāo)志:
??這個(gè)值由9個(gè)位組成,分別表示屬主、屬組和其它用戶(hù)對(duì)該內(nèi)存塊的訪(fǎng)問(wèn)權(quán)限。其中表示執(zhí)行權(quán)限的位將被忽略。
??指明訪(fǎng)問(wèn)權(quán)限的一個(gè)簡(jiǎn)單辦法是利用<sys/stat.h>中指定,并且在手冊(cè)頁(yè)第二節(jié)stat條目中說(shuō)明了的常量指定。
??例如,
???S_IRUSR和S_IWUSR分別指定了該內(nèi)存塊屬主的讀寫(xiě)權(quán)限,
???S_IROTH和S_IWOTH則指定了其它用戶(hù)的讀寫(xiě)權(quán)限。
綁定和脫離:
?pst= shmat(iShm_id, NULL, 0)
?一個(gè)進(jìn)程獲取對(duì)一塊共享內(nèi)存的訪(fǎng)問(wèn),這個(gè)進(jìn)程必須先調(diào)用 shmat(SHared Memory Attach,綁定到共享內(nèi)存)。
?將 shmget 返回的共享內(nèi)存標(biāo)識(shí)符 SHMID 傳遞給這個(gè)函數(shù)作為第一個(gè)參數(shù)。
?第二個(gè)參數(shù)是一個(gè)指針,指向您希望用于映射該共享內(nèi)存塊的進(jìn)程內(nèi)存地址;如果您指定NULL則Linux會(huì)自動(dòng)選擇一個(gè)合適的地址用于映射。
?第三個(gè)參數(shù)是一個(gè)標(biāo)志位,包含了以下選項(xiàng):   
??SHM_RND
???表示第二個(gè)參數(shù)指定的地址應(yīng)被向下靠攏到內(nèi)存頁(yè)面大小的整數(shù)倍。
???如果您不指定這個(gè)標(biāo)志,您將不得不在調(diào)用shmat的時(shí)候手工將共享內(nèi)存塊的大小按頁(yè)面大小對(duì)齊。
??SHM_RDONLY
???表示這個(gè)內(nèi)存塊將僅允許讀取操作而禁止寫(xiě)入。 如果這個(gè)函數(shù)調(diào)用成功則會(huì)返回綁定的共享內(nèi)存塊對(duì)應(yīng)的地址。
???通過(guò) fork 函數(shù)創(chuàng)建的子進(jìn)程同時(shí)繼承這些共享內(nèi)存塊;
???如果需要,它們可以主動(dòng)脫離這些共享內(nèi)存塊。
???當(dāng)一個(gè)進(jìn)程不再使用一個(gè)共享內(nèi)存塊的時(shí)候應(yīng)通過(guò)調(diào)用 shmdt(Shared Memory Detach,脫離共享內(nèi)存塊)
???函數(shù)與該共享內(nèi)存塊脫離。將由 shmat 函數(shù)返回的地址傳遞給這個(gè)函數(shù)。
???如果當(dāng)釋放這個(gè)內(nèi)存塊的進(jìn)程是最后一個(gè)使用該內(nèi)存塊的進(jìn)程,則這個(gè)內(nèi)存塊將被刪除。
???對(duì) exit 或任何exec族函數(shù)的調(diào)用都會(huì)自動(dòng)使進(jìn)程脫離共享內(nèi)存塊。
控制和釋放共享內(nèi)存塊:
?shmctl(iShm_id,IPC_RMID,0)<0
?調(diào)用 shmctl("Shared Memory Control",控制共享內(nèi)存)函數(shù)會(huì)返回一個(gè)共享內(nèi)存塊的相關(guān)信息。同時(shí) shmctl 允許程序修改這些信息。
?該函數(shù)的第一個(gè)參數(shù)是一個(gè)共享內(nèi)存塊標(biāo)識(shí)。要獲取一個(gè)共享內(nèi)存塊的相關(guān)信息,則為該函數(shù)傳遞 IPC_STAT 作為第二個(gè)參數(shù),同時(shí)傳遞一個(gè)指向一個(gè) struct shmid_ds 對(duì)象的指針作為第三個(gè)參數(shù)。
?要?jiǎng)h除一個(gè)共享內(nèi)存塊,則應(yīng)將 IPC_RMID 作為第二個(gè)參數(shù),而將 NULL 作為第三個(gè)參數(shù)。當(dāng)最后一個(gè)綁定該共享內(nèi)存塊的進(jìn)程與其脫離時(shí),該共享內(nèi)存塊將被刪除。
?應(yīng)當(dāng)在結(jié)束使用每個(gè)共享內(nèi)存塊的時(shí)候都使用 shmctl 進(jìn)行釋放,以防止超過(guò)系統(tǒng)所允許的共享內(nèi)存塊的總數(shù)限制。調(diào)用 exit 和 exec 會(huì)使進(jìn)程脫離共享內(nèi)存塊,
?但不會(huì)刪除這個(gè)內(nèi)存塊。 要查看其它有關(guān)共享內(nèi)存塊的操作的描述,請(qǐng)參考shmctl函數(shù)的手冊(cè)頁(yè)。

共享內(nèi)存的總體大小是有限制的,這個(gè)大小通過(guò)SHMMAX參數(shù)來(lái)定義(以字節(jié)為單位),
您可以通過(guò)執(zhí)行以下命令來(lái)確定 SHMMAX 的值:
cat /proc/sys/kernel/shmmax

修改共享內(nèi)存:
?設(shè)置 SHMMAX
?# >echo "2147483648" > /proc/sys/kernel/shmmax
?您還可以使用 sysctl 命令來(lái)更改 SHMMAX 的值:
?# sysctl -w kernel.shmmax=2147483648
?最后,通過(guò)將該內(nèi)核參數(shù)插入到 /etc/sysctl.conf 啟動(dòng)文件中,您可以使這種更改永久有效:
?# echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf
====================================================================

/*********************************************************
?*? filename:?ipc.c
?*? author:?wjy
?*? date:?20110509
*********************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/stat.h>
int main(int argc,char *argv[])
{
?key_t shmid;
?char *p_addr,*c_addr;
?pid_t pid;
?if(argc != 2)
?{
??printf("Usage:program something",argv[0]);
??exit(0);
?}
?if((shmid = shmget(IPC_PRIVATE,1024,S_IRUSR|S_IWUSR)) == -1)
?{
??printf("create share memory error/n");
??exit(1);
?}
?pid = fork();
?if(pid > 0 )
?{
??p_addr = shmat(shmid,0,0);
??memset(p_addr,'/0',1024);
??strncpy(p_addr,argv[1],1024);
??wait(NULL);
?}
?else if (pid == 0)
?{
??sleep(1);
??c_addr = shmat(shmid,0,0);
??printf("Client get %s/n",c_addr);
??exit(0);
?}
?if(shmctl(shmid,IPC_RMID,0)<0)
?{
??printf("共享內(nèi)存釋放出錯(cuò)!!/n");
??return(-1);
?}
?else
??printf("釋放共享內(nèi)存成功!/n");
}

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品影院在线观看| 欧美~级网站不卡| 久久免费黄色| 欧美中文字幕精品| 伊人蜜桃色噜噜激情综合| 久久久久国产精品厨房| 久久嫩草精品久久久精品一| 狠狠色丁香婷婷综合| 欧美国产日韩xxxxx| 国产精品h在线观看| 久久久久久久性| 欧美午夜电影网| 欧美成人自拍视频| 欧美电影电视剧在线观看| 欧美精品尤物在线| 久久国产高清| 欧美日韩国产精品一区| 美玉足脚交一区二区三区图片| 欧美区日韩区| 久久夜精品va视频免费观看| 久久久久久97三级| 亚洲精选在线| 国产精品99久久久久久人| 激情久久影院| 久久高清国产| 国产一区二区三区日韩| 这里只有精品在线播放| 99国产精品视频免费观看一公开| 久久精品一区蜜桃臀影院| 久久av老司机精品网站导航| 欧美日韩一区在线| 99国产精品视频免费观看一公开| 亚洲精品偷拍| 欧美日韩国产区| 中文精品视频一区二区在线观看| 亚洲精品一区在线| 欧美吻胸吃奶大尺度电影| 99re视频这里只有精品| 亚洲中字在线| 影音先锋欧美精品| 另类图片综合电影| 日韩视频免费在线| 午夜亚洲性色视频| 伊人精品在线| 久久欧美中文字幕| 亚洲国产一区二区三区高清| 欧美激情综合网| 亚洲在线视频| 亚洲国产精品福利| 亚洲午夜影视影院在线观看| 亚洲影院在线观看| 久久久久久久欧美精品| 亚洲三级视频| 国产字幕视频一区二区| 老牛嫩草一区二区三区日本 | 亚洲国内精品在线| 欧美视频一区二区| 久久精品视频导航| 亚洲淫片在线视频| 亚洲精品国产精品国自产在线| 欧美一级视频一区二区| 亚洲人成7777| 韩国av一区| 国产欧美日韩免费| 欧美日韩一本到| 欧美日韩三级在线| 欧美刺激性大交免费视频| 久久久精品日韩欧美| 亚洲一区二区三| 亚洲小视频在线| 在线亚洲欧美视频| 一区二区三区日韩精品| 99精品视频免费| 日韩午夜在线视频| 一区二区三区视频观看| 亚洲免费高清| 亚洲视频电影在线| 亚洲一区二区三区四区五区午夜| 欧美激情一区二区三区高清视频| 欧美专区在线观看| 久久精品国产99国产精品| 欧美中文字幕视频在线观看| 久久精品1区| 老司机aⅴ在线精品导航| 牛牛精品成人免费视频| 亚洲电影专区| 99re66热这里只有精品4| 亚洲男人的天堂在线观看| 久久精品视频免费观看| 免费试看一区| 亚洲盗摄视频| 一色屋精品视频在线观看网站| 精品91在线| 亚洲综合久久久久| 美玉足脚交一区二区三区图片| 亚洲国产欧美一区二区三区久久 | 亚洲精品中文字幕女同| 中文国产一区| 久久视频在线免费观看| 亚洲国产精品成人一区二区| 一区二区三区国产盗摄| 欧美阿v一级看视频| 国产婷婷色一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲国产综合91精品麻豆| 亚洲综合精品四区| 日韩视频一区二区三区在线播放免费观看| 亚洲在线一区| 欧美另类在线播放| 一区二区高清| 99这里只有精品| 欧美日韩另类综合| 91久久精品视频| 亚洲激情欧美| 欧美区一区二区三区| 亚洲日本理论电影| 日韩写真视频在线观看| 欧美日韩一级黄| 亚洲一区二区黄色| 亚洲午夜一区二区三区| 国产欧美一区二区三区国产幕精品| 久久中文欧美| 欧美aa在线视频| 蜜臀av一级做a爰片久久| 亚洲老板91色精品久久| 亚洲精品美女在线| 欧美特黄一级| 美女视频黄免费的久久| 欧美第一黄色网| 亚洲欧美日韩在线不卡| 久久精品国产91精品亚洲| 亚洲破处大片| 亚洲一区二区在线免费观看视频| 国产精品免费视频观看| 性做久久久久久免费观看欧美| 先锋影音一区二区三区| 99视频精品免费观看| 欧美一区二区视频在线观看2020| 亚洲国产欧美在线人成| 亚洲一区二区欧美日韩| 亚洲国产欧美国产综合一区| 亚洲欧美成人在线| 日韩视频在线免费| 久久久久高清| 久久免费黄色| 国产一区二区三区高清播放| 亚洲精品欧洲| 亚洲精品自在久久| 美女网站久久| 欧美成年人网站| 国产专区欧美专区| 午夜久久福利| 欧美有码在线观看视频| 国产精品成人在线| 一区二区精品| 午夜在线观看欧美| 国产精品女人毛片| 在线视频欧美日韩| 欧美亚洲自偷自偷| 国产女优一区| 午夜精品视频在线观看一区二区| 欧美一区二区三区在线免费观看| 欧美午夜精品理论片a级按摩 | 国产精品xvideos88| 91久久精品美女高潮| 亚洲日韩视频| 最新亚洲激情| 亚洲欧美日韩高清| 国内成+人亚洲| 欧美成人精品一区二区| 亚洲欧洲一二三| 一区二区三区 在线观看视频| 欧美久久综合| 久久激情综合| 亚洲精品影院| 麻豆精品一区二区综合av | 六月天综合网| 99精品免费| 国语自产精品视频在线看一大j8| 欧美成人资源| 久久久久久夜| 中国女人久久久| 亚洲国产精品一区二区www在线| 亚洲女性喷水在线观看一区| 在线精品视频在线观看高清| 国产精品午夜在线| 欧美高清在线精品一区| 欧美在线视频一区二区三区| 亚洲乱码国产乱码精品精| 久久久精品2019中文字幕神马| 亚洲精品综合久久中文字幕| 在线播放国产一区中文字幕剧情欧美| 欧美四级剧情无删版影片| 欧美黄污视频| 免费成人美女女| 免费亚洲视频| 欧美久久久久免费| 欧美成人激情在线| 欧美精品激情| 欧美视频在线免费看|