最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python將文件映射到內(nèi)存使用mmap.mmap()函數(shù)方式

 更新時(shí)間:2024年02月10日 09:57:52   作者:AllardZhao  
這篇文章主要介紹了Python將文件映射到內(nèi)存使用mmap.mmap()函數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

如何將文件映射到內(nèi)存

實(shí)際案例

(1)在訪問某些二進(jìn)制文件時(shí),希望能把文件映射到內(nèi)存中,可以實(shí)現(xiàn)隨機(jī)訪問。(framebuffer設(shè)備文件)

(2)某些嵌入式設(shè)備,寄存器被編址到內(nèi)存地址空間,我們可以映射/dev/mem某范圍,去訪問這些寄存器。

(3)如果多個(gè)進(jìn)程映射同一個(gè)文件,還能實(shí)現(xiàn)進(jìn)程通信的目的。

解決方案

使用標(biāo)準(zhǔn)庫中mmap模塊的mmap()函數(shù),它需要一個(gè)打開的文件描述作為參數(shù)。

代碼演示

# 使用dd命令創(chuàng)建大小為1M的,每個(gè)字節(jié)都是0的二進(jìn)制文件demo.bin
~ % dd if=/dev/zero of=demo.bin bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes transferred in 0.008838 secs (118644037 bytes/sec)
# 以16進(jìn)制形式查看這個(gè)文件
~ % od -x demo.bin
0000000      0000    0000    0000    0000    0000    0000    0000    0000
*
4000000
# 接下來對(duì)這個(gè)文件進(jìn)行映射
import mmap
 
'''
mmap.mmap函數(shù)介紹:
    需要注意對(duì)于不同的平臺(tái)對(duì)這個(gè)函數(shù)使用稍有差別。
    Windows: mmap(fileno, length[, tagname[, access[, offset]]])
    Unix: mmap(fileno, length[, flags[, prot[, access[, offset]]]])
    fileno為文件描述符,并不是一個(gè)文件對(duì)象,文件描述符是由系統(tǒng)調(diào)用的open函數(shù)得到的,
    系統(tǒng)調(diào)用的open函數(shù)在os.open(),也可以使用python的open函數(shù)
    offset為指定映射區(qū)域,必須以頁對(duì)齊的
'''
 
# b為二進(jìn)制模式,r+為讀寫權(quán)限
f = open('demo.bin', 'r+b')
# 得到文件描述符
print(f.fileno())
# 做映射,映射區(qū)域長(zhǎng)度為0映射整個(gè)文件,訪問權(quán)限寫
mn = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_WRITE)
# m為mmap對(duì)象類似于數(shù)組一樣的操作
print(type(mn))
print(mn[0])
print(mn[10:20])
# 對(duì)文件進(jìn)行寫操作
mn[0] = 88
# 字符串長(zhǎng)度和切片長(zhǎng)度保持一致
mn[4:8] = b'\xff' * 4
# 設(shè)置offset跳過4個(gè)頁,并且映射8個(gè)頁
mn2 = mmap.mmap(f.fileno(), mmap.PAGESIZE * 8, access=mmap.ACCESS_WRITE, 
offset=mmap.PAGESIZE * 4)
# 對(duì)切片進(jìn)行修改
mn2[:0x1000] = b'\xaa' * 0x1000
修改文件映射內(nèi)存的內(nèi)容并查看
# 修改映射地址內(nèi)容
# 查看[0]、[4:8]和[:0x1000]內(nèi)容修改
 ~ % od -x demo.bin
0000000      0058    0000    ffff    ffff    0000    0000    0000    0000
0000020      0000    0000    0000    0000    0000    0000    0000    0000
*
0040000      aaaa    aaaa    aaaa    aaaa    aaaa    aaaa    aaaa    aaaa
*
0050000      0000    0000    0000    0000    0000    0000    0000    0000
*
4000000

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python 如何利用ffmpeg 處理視頻素材

    Python 如何利用ffmpeg 處理視頻素材

    ffmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序,使用這個(gè)神器,便可以處理各種視頻素材內(nèi)容,極度舒適。本文將介紹如何利用ffmpeg對(duì)視頻素材進(jìn)行處理,感興趣的可以了解一下
    2021-11-11
  • 在win和Linux系統(tǒng)中python命令行運(yùn)行的不同

    在win和Linux系統(tǒng)中python命令行運(yùn)行的不同

    本文給大家分享的是作者在在win和Linux系統(tǒng)中python命令行運(yùn)行的不同的解決方法,有相同需求的小伙伴可以參考下
    2016-07-07
  • python GUI庫圖形界面開發(fā)之PyQt5滑塊條控件QSlider詳細(xì)使用方法與實(shí)例

    python GUI庫圖形界面開發(fā)之PyQt5滑塊條控件QSlider詳細(xì)使用方法與實(shí)例

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5滑塊條控件QSlider詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下
    2020-02-02
  • Python文件操作JSON CSV TSV Excel和Pickle文件序列化

    Python文件操作JSON CSV TSV Excel和Pickle文件序列化

    這篇文章主要為大家介紹了Python文件操作之JSON、CSV、TSV、Excel和Pickle文件序列化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 4行Python代碼生成圖像驗(yàn)證碼(2種)

    4行Python代碼生成圖像驗(yàn)證碼(2種)

    這篇文章主要介紹了4行Python代碼生成圖像驗(yàn)證碼(2種),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 如何用VScode配置Python開發(fā)環(huán)境

    如何用VScode配置Python開發(fā)環(huán)境

    這篇文章主要介紹了如何用VScode配置Python開發(fā)環(huán)境,vscode有很多優(yōu)點(diǎn),用VScode來編寫Python,也是相當(dāng)?shù)暮糜玫?需要的朋友可以參考下
    2023-03-03
  • Python裝飾器超詳細(xì)實(shí)例教程

    Python裝飾器超詳細(xì)實(shí)例教程

    本文介紹了Python裝飾器的基本概念、用途和實(shí)現(xiàn)方法,裝飾器是一種在不修改原函數(shù)代碼的前提下,為函數(shù)動(dòng)態(tài)添加功能的工具,其本質(zhì)是閉包和高階函數(shù),裝飾器可用于日志記錄、計(jì)時(shí)、權(quán)限校驗(yàn)等功能,感興趣的朋友跟隨小編一起看看吧
    2026-05-05
  • 深入理解python虛擬機(jī)如何實(shí)現(xiàn)閉包

    深入理解python虛擬機(jī)如何實(shí)現(xiàn)閉包

    當(dāng)能夠從設(shè)計(jì)者的層面去理解閉包就再也不用死記硬背一些閉包的概念了,所以本文就來從虛擬機(jī)層面和大家一起討論函數(shù)閉包是如何實(shí)現(xiàn)的
    2023-10-10
  • 簡(jiǎn)單了解OpenCV是個(gè)什么東西

    簡(jiǎn)單了解OpenCV是個(gè)什么東西

    這篇文章主要介紹了簡(jiǎn)單了解OpenCV是什么,結(jié)合了幾篇相關(guān)文章的介紹,還是比較不錯(cuò)的,希望大家在閱讀過之后,會(huì)對(duì)OpenCV有一個(gè)簡(jiǎn)單了解。
    2017-11-11
  • pyqt5-tools安裝失敗的詳細(xì)處理方法

    pyqt5-tools安裝失敗的詳細(xì)處理方法

    最近在工作中遇到一個(gè)問題,python?pyqt5在安裝的時(shí)候居然提示失敗了,無奈只能找解決的辦法,這篇文章主要給大家介紹了關(guān)于pyqt5-tools安裝失敗的詳細(xì)處理方法,需要的朋友可以參考下
    2022-05-05

最新評(píng)論

丹江口市| 土默特左旗| 威信县| 凌海市| 溧阳市| 河间市| 东丰县| 大化| 越西县| 公主岭市| 萨嘎县| 安国市| 汉川市| 六枝特区| 岱山县| 犍为县| 肥东县| 阳信县| 罗源县| 丹东市| 荆门市| 桐乡市| 桦南县| 锦州市| 镇远县| 封开县| 抚顺市| 谷城县| 武隆县| 浮梁县| 文水县| 永嘉县| 定南县| 沙湾县| 吐鲁番市| 维西| 潞西市| 辽宁省| 山西省| 临江市| 天等县|