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

S.l.e!ep.¢%

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

linux 共享內存的使用

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

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

共享內存的總體大小是有限制的,這個大小通過SHMMAX參數來定義(以字節為單位),
您可以通過執行以下命令來確定 SHMMAX 的值:
cat /proc/sys/kernel/shmmax

修改共享內存:
?設置 SHMMAX
?# >echo "2147483648" > /proc/sys/kernel/shmmax
?您還可以使用 sysctl 命令來更改 SHMMAX 的值:
?# sysctl -w kernel.shmmax=2147483648
?最后,通過將該內核參數插入到 /etc/sysctl.conf 啟動文件中,您可以使這種更改永久有效:
?# 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");
??return(-1);
?}
?else
??printf("釋放共享內存成功!/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>
            久久影音先锋| 欧美精品在线观看一区二区| 久久中文字幕一区| 在线亚洲一区二区| 夜夜爽av福利精品导航| 国产精品久久久久久久久借妻 | 久久国产日韩| 久久人人爽人人爽爽久久| 一区二区三区高清视频在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产午夜精品理论片a级探花| 免费在线亚洲欧美| 国产亚洲免费的视频看| 亚洲人成在线观看网站高清| 久久网站热最新地址| 欧美一区日韩一区| 欧美激情一区二区三区不卡| 久久先锋影音av| 国产日韩在线亚洲字幕中文| 日韩一级精品| 宅男噜噜噜66一区二区66| 久久精品女人| 美女精品在线观看| 伊人久久婷婷| 欧美成人午夜激情| 亚洲精品日产精品乱码不卡| 久久久久91| 免费观看30秒视频久久| 黑丝一区二区| 美玉足脚交一区二区三区图片| 久久久久se| 亚洲欧洲一级| 欧美日韩国产综合一区二区| 亚洲婷婷综合色高清在线| 亚洲午夜影视影院在线观看| 欧美日韩一区二区国产| 亚洲午夜一区| 欧美高清在线播放| 一区二区三区精品国产| 国产精品日韩精品欧美精品| 亚洲最新色图| 亚洲福利av| 久久青草久久| 国产精品99久久久久久久久 | 欧美日韩国产成人高清视频| 亚洲精品久久久蜜桃| 亚洲欧美日韩天堂一区二区| 91久久精品国产91久久性色| 一片黄亚洲嫩模| 欧美激情第六页| 国产午夜久久久久| 欧美极品欧美精品欧美视频| 亚洲一区二区三区免费视频 | 免费看黄裸体一级大秀欧美| 久久av一区二区| 欧美成ee人免费视频| 国产精品露脸自拍| 欧美大片在线观看| 亚洲欧美在线磁力| 久久国产精品高清| 国产一区日韩一区| 国产欧美日韩视频一区二区| 欧美一区二区在线视频| 欧美一激情一区二区三区| 国产精品久久婷婷六月丁香| 欧美xx69| 小处雏高清一区二区三区| 性欧美暴力猛交69hd| 亚洲一区一卡| 香蕉国产精品偷在线观看不卡| 在线一区视频| 午夜精品福利在线观看| 午夜精品福利在线| 久久精品二区| 免费不卡亚洲欧美| 欧美激情精品久久久久久| 欧美电影专区| 一本久久a久久精品亚洲| 亚洲毛片在线观看| 亚洲欧美www| 美日韩精品免费| 欧美视频一区二区| 国产色综合久久| 亚洲精品系列| 久久免费偷拍视频| 日韩香蕉视频| 欧美在线看片| 欧美精品播放| 红桃视频欧美| 亚洲性视频h| 亚洲激情校园春色| 亚洲免费在线看| 欧美日韩一级黄| 亚洲欧洲精品一区二区三区不卡| 亚洲综合日韩在线| 亚洲片区在线| 欧美成人视屏| 亚洲精选在线观看| 久久综合色8888| 久久久久久精| 在线成人激情黄色| 可以看av的网站久久看| 欧美亚洲三区| 又紧又大又爽精品一区二区| 欧美一级黄色网| 午夜伦理片一区| 国产自产v一区二区三区c| 久久精品色图| 久久综合中文字幕| 尤物网精品视频| 亚洲高清自拍| 久久亚洲视频| 欧美国内亚洲| 亚洲一区二区三区三| 亚洲欧美日韩国产一区| 国产午夜久久| 亚洲国产视频直播| 国产精品久久午夜| 看欧美日韩国产| 欧美日精品一区视频| 久久久国产亚洲精品| 欧美黄色一级视频| 欧美在线影院在线视频| 免费不卡中文字幕视频| 午夜久久影院| 免费日韩av电影| 久久综合影音| 国产精品丝袜久久久久久app | 日韩一级精品| 国产综合色在线| 欧美日韩国产另类不卡| 久久福利资源站| 欧美特黄一级| 亚洲精品欧美| 国产在线精品二区| 亚洲一二区在线| 亚洲一区二区免费在线| 欧美电影免费网站| 亚洲国产日韩欧美一区二区三区| 国产日韩在线播放| 亚洲欧美另类综合偷拍| 亚洲欧美精品在线观看| 欧美性天天影院| 亚洲一区二区动漫| 久久国产免费看| 国产亚洲一级高清| 久久免费午夜影院| 欧美成人高清视频| 亚洲精选成人| 国产精品揄拍一区二区| 午夜国产精品影院在线观看| 久久久久久999| 伊人影院久久| 欧美视频网址| 久热这里只精品99re8久| 欧美国产一区二区| 亚洲一区二区精品| 狠狠色综合网| 欧美视频不卡| 麻豆视频一区二区| 亚洲综合欧美日韩| 亚洲一区二区视频在线| 欧美久久久久久久久| 亚洲免费在线| 亚洲国产精品高清久久久| 午夜精品www| 99riav国产精品| 亚洲欧美国内爽妇网| 亚洲高清免费视频| 久久成人精品视频| 亚洲一区二区三区777| 在线欧美电影| 在线精品福利| 国产一区二区三区免费观看| 欧美日韩精品中文字幕| 久久综合给合久久狠狠狠97色69| 亚洲午夜激情| 亚洲手机视频| 亚洲在线观看视频| 亚洲专区欧美专区| 欧美午夜精品一区二区三区| 女人香蕉久久**毛片精品| 亚欧成人精品| 久久综合五月| 免费观看久久久4p| 欧美精品在线播放| 欧美日韩国产黄| 欧美色视频一区| 国产日韩综合| 亚洲国产高潮在线观看| 日韩小视频在线观看| 夜夜嗨av一区二区三区网页 | 影音先锋另类| 亚洲精品一区二区三区蜜桃久| 日韩小视频在线观看专区| 亚洲一区二区在线看| 久久人人97超碰精品888| 亚洲成色精品| 亚洲视频大全| 久久综合久久综合九色|