首页 > 系统相关 >二进制文件内存映射

二进制文件内存映射

时间:2024-04-27 14:34:32浏览次数:29  
标签:映射 二进制 mmap filename access 内存 print x00 size

点击查看代码
# 对二进制文件做内存映射
# 使用 mmap 模块对文件进行内存有映射操作
import mmap
import os.path


def memory_map(filename, access=mmap.ACCESS_WRITE):
    """

    :param filename:
    :param access: mmap.ACCESS_WRITE: 读写
                   mmap.ACCESS_READ:  只读
                   mmap.ACCESS_COPY: 更改不会保存到原文件
    :return:
    """
    size = os.path.getsize(filename)
    fd = os.open(filename, os.O_RDWR)
    return mmap.mmap(fd, size, access=access)


# make test data
size = 100000
with open("data", "wb") as f:
    f.seek(size - 1)
    f.write(b"\x00")

# test
with memory_map("data") as m:
    print(len(m))  # 100000
    print(m[:10])  # b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
    print(m[0])  # 0
    m[0:11] = b"Hello World"

# verify
with open("data", "rb") as f:
    print(f.read(11))  # b'Hello World'

标签:映射,二进制,mmap,filename,access,内存,print,x00,size
From: https://www.cnblogs.com/yimeimanong/p/18162013

相关文章

  • 二进制数组
    点击查看代码#读写二进制结构数组fromfunctoolsimportpartialfromstructimportStruct#Writedefwrite_records(records,format,f):"""Writeasequenceoftupletoabinaryfileofstructures"""record_struct=Struct(format)......
  • 复杂二进制数据
    点击查看代码#读取嵌套型和大小可变的二进制结构fromitertoolsimportchainimportstruct#多边形数组polys=[[(1.0,2.1),(2.0,3.2),(3.0,4.3)],[(1.1,2.2),(2.1,3.3),(3.1,4.4),(4.1,5.5)],[(1.2,2.3),(2.2,3.4),(3.1,4.5)],]#......
  • docker之旅 7.docker的端口映射解决所有不服
    这是我的docker-compose.yml文件version:'2.x'services:myNginx:image:nginxrestart:alwaysmyRedis:image:redisrestart:alwaysports:-"6379:6379"mysql:image:mysqlrestart:alwaysen......
  • openharmony 多线程的方式有哪些?两个worker线程数据如何通讯、内存如何共享、与Java多
    OpenHarmony操作系统支持多种多线程并发处理策略,以提升应用的响应速度与帧率,以及防止耗时任务对主线程的干扰。以下是OpenHarmony中的多线程方式,以及Worker线程间的数据通讯和内存共享方法,还有它们与Java多线程的区别:OpenHarmony多线程方式Worker线程:OpenHarmony中的Worker是......
  • ECS与CIM常用字段映射表
    元数据字段|metadataCIMECS_time@timestamptagtags_rawmessagesourcetypelabels常用字段|CommonFieldsCIMECSDescriptionNamesrc_ipsource.ipIPaddressofthesource(IPv4orIPv6).源地址dest_ipdestination.ipIPaddre......
  • gdb 根据c语言二进制文件进程号查看内部多线程任务
    C语言二进制文件a编译时添加了-g(gdb调试),但是gdba这种方式有时不容易复现一些场景。这时可以先正常启动a,然后根据a的进程号启动gdb调试。#1.找到程序进程号psaux|grepa#2.使用GDB附加到该进程sudogdb-p[PID]#3.使用infothreads命令来列出......
  • vue3打包js内存溢出
     第一步:npminstall-gincrease-memory-limit第二步:npminstallincrease-memory-limit—save-dev第三步:package.json文件中修改   "build:win32":"cross-envLIMIT=2048increase-memory-limitBUILD_TARGET=win32node.electron-vue/build.js",//添加这个......
  • Bochs内存中的Guest和Host
      Bochs是通过配置文件(.bxrc文件)的方式来设置模拟计算机的硬件参数,其中MEMORY部分,分别需要设置Guest和Host的大小来决定虚拟计算机的内存大小,有什么区别呢?通过下面的Bochs构架图可以弄清楚:    要点说明:  1、Bochs在现实环境中属于应用程序,Host表示应用程序用来模拟内......
  • 从REPLACEMENT_OPERATOR_NEW_AND_DELETE看UE的堆内存管理及gcc相关实现
    观察为了让庞大代码库看起来更简洁一些,UE使用了不少C/C++黑魔法:宏。把一些重复或者繁琐的实现细节隐藏在了宏里面(例如最为常见且繁琐的GENERATED_BODY宏),尽管代码看起来更简洁,但也隐藏了一些(重要的)细节。在看UE插件实现时,意外的看到IMPLEMENT_MODULE宏定义中,不仅包含了初始化......
  • 揭露 FileSystem 引起的线上 JVM 内存溢出问题
    作者:来自vivo互联网大数据团队-YeJidong本文主要介绍了由FileSystem类引起的一次线上内存泄漏导致内存溢出的问题分析解决全过程。内存泄漏定义(memoryleak):一个不再被程序使用的对象或变量还在内存中占有存储空间,JVM不能正常回收改对象或者变量。一次内存泄漏似乎不会有大......