将一个文件映射到内存,然后获取到该内存的文件描述符
C++ MMap a file to memory and then get a file descriptor to that memory
我看到这个帖子:系统调用映射内存到文件描述符(逆mmap)?
我想要一个库,我想要一个文件描述符在它的接口能够被赋予一个文件描述符,将从内存区域读取,我已经mmap
ed文件。
我需要一些东西,大意是:
-
mmap
一个大文件(5gb)的内容到内存 -
获取该内存区域的文件描述符
-
调用一个接受文件描述符的库并做一些事情
我为mmap
使用的原始文件描述符当然不起作用,因为它指的是磁盘上的文件。
到目前为止,我能够将文件mmap
到内存中,但是我调用了fmemopen
,但是在调用该函数时没有设置fileno
。指针吗?
我这样做的原因是我试图减少库在处理文件中的数据时所做的复制量
从某种意义上说,你的要求似乎微不足道。从另一个意义上说,这是不可能的。
如果这个内存区域代表一个你已经mmap
编辑过的文件,那么你已经有了它的文件描述符,因为你需要这个文件描述符来调用mmap
。如果您以MAP_SHARED
模式映射它,通过文件描述符对文件的修改应该自动显示在内存中,对内存的修改也应该自动显示在文件中。这就是mmap
在MAP_SHARED
模式下的全部意义。
但是,查看手册页,您可能必须在某些系统上调用msync
,以便您对内存所做的事情显示在文件中。
malloc
或类似的方法获得了一些内存区域,然后只希望该内存区域获取文件描述符,那么这是不可能的
相关文章:
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- WinVerifyTrust 仅在使用文件而不是内存 blob 时才有效
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 内存映射文件访问非常慢
- 我正在尝试创建一个C++映射,该映射在boost内存映射文件中具有向量值
- 这些结构在文件中的大小不同,但在程序内存中的大小相同
- 在嵌入式系统中读取文件的内存碎片
- 如何从文件中读取 100x24 矩阵并将其作为浮点矩阵保存在内存中?
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- 提升进程间共享内存删除、权限和输出文件
- 将内存文件添加到 clang 编译器实例
- 为什么我的 C++ 程序在执行 TCMALLOC 堆检查器或堆配置文件时使用大量内存
- C++ 从磁盘读取文件并将其写入共享内存
- 为什么在编译时需要知道对象的内存配置文件以进行堆栈放置?
- 增强共享内存:文件的卷已被外部更改,打开文件不再有效
- 在内存文件中使用
- 创建内存文件
- 将char指针映射到具有文件描述符的内存文件