亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

用mmap()共享內存 - 我的天地

系統 2011 0

用mmap()共享內存 - 我的天地

用mmap()共享內存

rurutia posted @ 2007年4月28日 07:48 in 編程筆記 with tags 共享內存 mmap , 3775 閱讀

接口:

          void *mmap( void *start, size_t length, int port, int flags, int fd, off_t offset)
        

正常返 回映射區的地址,出錯返回-1。

start 為映射區域的首地址,一般賦 值NULL通過系統自動分配。

length 為區域大小。

fd 為映射文件的文件描述符。

offset 為映 射文件的偏移,也就是從文件的offset處開始映射。

port : 映射 區域的屬性值,可取PORT_EXEC, PORT_READ, PORT_WRITE, PORT_NONE,四個值,分別 是區域內可執行、可讀、可寫和不可訪問。

flags : 映射文件屬 性值,可取 MAP_ANON, MAP_PRIVATE, MAP_SHARED,分別代表匿名映射,私有copy-on -write映射,和共享映射。

MAP_ANON映射只能實現父子進程的內存共 享,因為只有父子進程有才有相同的映射后的地址空間,不同進程的內存共享需要用 MAP_SHARED通過映射文件來實現。

值得一提的是,映射的初期并沒有 真正分配內存,只有訪問頁面的時候,引發一個缺頁異常,這時才真正分配內存。

示例a.c和b.c,先建立一個文件sharefile,內容是”My name is Foo!”。

----a.c----

          int main()
          


{
int fd;
char *prt;
char *msg="My name is Foo!";


fd=open("sharefile",O_RDWR,00777);
prt=(char*) mmap(NULL,strlen(msg)+1,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
close(fd);

memcpy(prt,msg,strlen(msg)+1);

printf("%s",prt);

sleep(10); /*等待b去修改共享內存內容。*/

printf("%s",prt);

munmap(prt,strlen(msg)+1);

return 0;
}

----b.c----

          int main()
          
{
int fd;
char *prt;


char *msg="My name is Bar!";
fd=open("sharefile",O_RDWR,00777);
prt=(char*) mmap(NULL,strlen(msg)+1,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
close(fd);

memcpy(prt,msg,strlen(msg)+1);

munmap(prt,strlen(msg));

return 0;
}

運行./a 程序輸出:

          My name is Foo!
        

停止10s

          My name is Foo!
        

先運行./a, 然后切換另一個控制臺運行./b,切換回發現a的輸出變為:

          My name is Foo!
        

停止10s

          My name is Bar!
        

可見,a內 存中的內容被b修改了~最后的munmap函數會使得映射內存中的內容寫回文件中,所以 文件中的內容也變成”My name is Bar!”。

參考資料: 1. 《Computer Systems - A Programmer's Perspective》 2.《Linux Programming by Example》

用mmap()共享內存 - 我的天地


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产成人精品一区二三区在线观看 | 四虎色影院 | 这里只有精品久久 | 牛牛影院成人网 | 亚洲国产日韩综合久久精品 | 青春禁区视频在线观看动漫版 | 国产欧美日韩第一页 | 狠狠亚洲婷婷综合色香 | 日韩一区二区视频在线观看 | 私人影院在线免费观看 | 中文字幕日韩欧美 | 国产国产精品人在线视 | 日本精品视频一区二区三区 | 美女精品 | 九色综合久久综合欧美97 | 国产大片91精品免费看3 | 奇米影视国产 | 久久一区二区免费播放 | 日韩中文字幕在线亚洲一区 | 99成人| 久久国产a| 水蜜桃网站| 99久久精品久久久 | 久久亚洲精品视频 | 午夜爱爱小视频 | 夜夜躁狠狠躁日日躁视频 | 成人免费淫片免费观看 | 欧美洲精品亚洲精品中文字幕 | 国产精品久久久久久麻豆一区 | 成人国产在线看不卡 | 日韩在线手机看片免费看 | 91精品自在拍精选久久 | 欧美一区二区免费 | 欧美久久影院 | 九九热播视频 | 亚洲国产另类久久久精品小说 | 国产小姨子 | 国产亚洲精品成人久久网站 | 天天看天天射天天碰 | 亚洲欧美中文字幕高清在线一 | 欧美性猛交xxxxbbbb |