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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 内存映射函数 mmap()函数笔记

發布時間:2025/4/5 linux 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 内存映射函数 mmap()函数笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.所需頭文件:<sys/mman.h>

2.函數原型:void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset)

(1)start:要映射到的內存區域的起始地址,通常都是用NULL(NULL即為0)。NULL表示由內核來指定該內存地址 ;

(2)length:要映射的內存區域的大小 ;

(3)prot:期望的內存保護標志,不能與文件的打開模式沖突。是以下的某個值,可以通過or運算合理地組合在一起 :

? ? ? ? ?PROT_EXEC //頁內容可以被執行?
? ? ? ? ?PROT_READ //頁內容可以被讀取?
? ? ? ? ?PROT_WRITE //頁可以被寫入?
? ? ? ? ?PROT_NONE //頁不可訪問?

(4)flags:指定映射對象的類型,映射選項和映射頁是否可以共享。它的值可以是一個或者多個以下位的組合體 :

? ? ? ? ?MAP_FIXED :使用指定的映射起始地址,如果由start和len參數指定的內存區重疊于現存的映射空間,重疊部分將會被丟? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 棄。如果指定的起始地址不可用,操作將會失敗。并且起始地址必須落在頁的邊界上。?
? ? ? ? ?MAP_SHARED :對映射區域的寫入數據會復制回文件內, 而且允許其他映射該文件的進程共享。?
? ? ? ? ?MAP_PRIVATE :建立一個寫入時拷貝的私有映射。內存區域的寫入不會影響到原文件。這個標志和以上標志是互斥的,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?只能使用其中一個。?
? ? ? ? ? MAP_DENYWRITE :這個標志被忽略。?
? ? ? ? ? MAP_EXECUTABLE :同上?
? ? ? ? ? MAP_NORESERVE :不要為這個映射保留交換空間。當交換空間被保留,對映射區修改的可能會得到保證。當交換空? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?間不被保留,同時內存不足,對映射區的修改會引起段違例信號。?
? ? ? ? ? MAP_LOCKED :鎖定映射區的頁面,從而防止頁面被交換出內存。?
? ? ? ? ? MAP_GROWSDOWN :用于堆棧,告訴內核VM系統,映射區可以向下擴展。?
? ? ? ? ? MAP_ANONYMOUS :匿名映射,映射區不與任何文件關聯。?
? ? ? ? ? MAP_ANON :MAP_ANONYMOUS的別稱,不再被使用。?
? ? ? ? ? MAP_FILE :兼容標志,被忽略。?
? ? ? ? ? MAP_32BIT :將映射區放在進程地址空間的低2GB,MAP_FIXED指定時會被忽略。當前這個標志只在x86-64平臺上得? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 到?支持。?
? ? ? ? ? MAP_POPULATE :為文件映射通過預讀的方式準備好頁表。隨后對映射區的訪問不會被頁違例阻塞。?
? ? ? ? ? MAP_NONBLOCK :僅和MAP_POPULATE一起使用時才有意義。不執行預讀,只為已存在于內存中的頁面建立入?口。

(5)fd:文件描述符(由open函數返回)?

(6)offset:表示被映射對象(即文件)從那里開始對映,通常都是用0。 該值應該為大小為PAGE_SIZE的整數倍 ;

(7)返回值:成功執行時,mmap()返回被映射區的指針,失敗時,mmap()返回MAP_FAILED

errno被設為以下的某個值?
EACCES:訪問出錯?
EAGAIN:文件已被鎖定,或者太多的內存已被鎖定?
EBADF:fd不是有效的文件描述詞?
EINVAL:一個或者多個參數無效?
ENFILE:已達到系統對打開文件的限制?
ENODEV:指定文件所在的文件系統不支持內存映射?
ENOMEM:內存不足,或者進程已超出最大內存映射數量?
EPERM:權能不足,操作不允許?
ETXTBSY:已寫的方式打開文件,同時指定MAP_DENYWRITE標志?
SIGSEGV:試著向只讀區寫入?
SIGBUS:試著訪問不屬于進程的內存區?

(8)使用例子:

int fd = open("/dev/mem",O_RDWR|O_SYNC);if(fd < 0) {printf("opent /dev/mem error! \r\n");close(fd);return; }maped_addr = (unsigned long*)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0xF8001000);

3. int munmap(void *start, size_t length)?

start:要取消映射的內存區域的起始地址?
length:要取消映射的內存區域的大小。?
返回說明?
成功執行時munmap()返回0。失敗時munmap返回-1.

總結

以上是生活随笔為你收集整理的Linux 内存映射函数 mmap()函数笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 99爱这里只有精品 | 天天操天天干天天操 | 欧美区二区三区 | 日本老年老熟无码 | 成人免费在线播放视频 | 天天天天天天干 | 久久久久久一区二区 | 女人久久久 | 久久成人人人人精品欧 | 久久免费少妇高潮久久精品99 | 日韩视频一区二区三区四区 | 精品777| 久久综合av| 钰慧的mv视频在线观看 | 欧美视频精品 | 亚洲二区中文字幕 | 奇米狠狠干 | 91人妻一区二区三区蜜臀 | 苍井空浴缸大战猛男120分钟 | 国产97超碰 | 亚洲大胆人体 | 日韩精品在线视频观看 | 日韩欧美亚洲国产精品字幕久久久 | 国产成人在线观看免费 | 亚洲欧洲日韩国产 | 色图社区| 亚洲一级二级片 | 91中文字幕视频 | 国产一区在线免费 | 无码人妻精品一区二区三区99不卡 | 亚洲一区 欧美 | 国产亚洲精品久 | a在线免费 | 欧美浮力影院 | 超碰人人超 | 亚洲成人伦理 | 亚洲区小说 | 麻豆性视频 | 福利视频91 | 黄色大毛片 | 在线免费观看不卡av | 亚洲国产精品自拍 | 国产剧情一区二区三区 | 亚洲国产欧美视频 | 99中文字幕| 久久网址 | www.亚洲一区二区 | 国产九色av | 欧美日韩在线视频一区二区三区 | 先锋资源中文字幕 | 亚洲日批 | 日本孰妇毛茸茸xxxx | 国产第四页 | 丁香花高清视频完整电影 | 国产精品天天操 | 日韩有码中文字幕在线 | 免费高清毛片 | 黄色大尺度视频 | 日本黄色短片 | 欧美熟妇精品黑人巨大一二三区 | beeg日本高清xxxx18 | 日韩视频免费在线 | 亚洲九九爱 | 日韩欧美精品在线播放 | 国产123区在线观看 91国产一区二区 | 一级bbbbbbbbb毛片 | 欧美日韩一区电影 | 色婷av| 中文字幕第一页在线播放 | 国产女主播一区二区三区 | 成人亚洲视频 | 男女交性视频 | 色婷视频| 麻豆影音先锋 | 欧美成人一区在线观看 | 99热一区 | 国产99久久久久久免费看 | 国产视频久久久 | 伊人春色视频 | 不卡av免费观看 | 欧美a√在线 | 伊人99热 | missav在线| 国产精品视频久久久久久 | 国产精品羞羞答答 | 黄网站色视频 | 在线视频观看 | 岛国精品视频 | 久久精品久久国产 | 日日操操| 91在线小视频| 日本精品一二三区 | 蜜桃久久一区二区三区 | 青草一区二区 | 伊人色av | 岛国一区二区三区 | 九九热精彩视频 | 韩国精品视频在线观看 | 91网站视频在线观看 |