日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

匿名映射

發布時間:2023/11/30 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 匿名映射 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通過使用我們發現,使用映射區來完成文件讀寫操作十分方便,父子進程間通信也較容易。但缺陷是,每次創建映射區一定要依賴一個文件才能實現。通常為了建立映射區要open一個temp文件,創建好了再unlink、close掉,比較麻煩。 可以直接使用匿名映射來代替。其實Linux系統給我們提供了創建匿名映射區的方法,無需依賴一個文件即可創建映射區。同樣需要借助標志位參數flags來指定:MAP_ANONYMOUS (或MAP_ANON)。如:int *p = mmap(NULL, 4, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);

"4"隨意舉例,該位置表大小,可依實際需要填寫。offset仍必須為4k的整數倍。

?

需注意的是,MAP_ANONYMOUS和MAP_ANON這兩個宏是Linux操作系統特有的宏。在其它unix和類Unix操作系統中如無該宏定義,可使用如下兩步來完成匿名映射區的建立(Linux也可以):

fd = open("/dev/zero", O_RDWR);

p = mmap(NULL, size, PROT_READ|PROT_WRITE, MMAP_SHARED, fd, 0);

Linux系統中的兩個設備文件:/dev/zero,其可以提供無窮無盡的數據,想要多大,就可以多大;/dev/null,為黑洞文件,可以吞掉一切東西,類似回收站,只是不可以回收,徹底刪除(可以管道重定向到該文件,清理屏幕)。

[root@localhost mmap]# ls -l /dev/null

crw-rw-rw-. 1 root root 1, 3 Mar 29 23:32 /dev/null

1,3 表示設備文件的:主設備號,從設備號

Unix操作系統發展歷史: ?丹尼斯里奇是C語言之父

Linux之父是Linus Torvalds??? 上圖中除了unix,其余都是類unix操作系統。

?

//匿名映射

#include <stdio.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/mman.h>int main(void) {int *p;pid_t pid;int fd;fd = open("/dev/zero", O_RDWR);p = mmap(NULL, 400, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);if(p == MAP_FAILED){ perror("mmap error");exit(1);}pid = fork(); //創建子進程if(pid == 0){*p = 2000;printf("child, *p = %d\n", *p);} else {sleep(1);printf("parent, *p = %d\n", *p);}munmap(p, 4); //釋放映射區return 0; }

[root@localhost mmap]# ./fork_map_anon

child, *p = 2000

parent, *p = 0

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的匿名映射的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。