我看到这个帖子:系统调用映射内存到文件描述符(逆mmap)?
我想要一个库,我想要一个文件描述符在它的接口能够被赋予一个文件描述符,将从内存区域读取,我已经mmap
ed文件。
我需要一些东西,大意是:
-
mmap
一个大文件(5gb)的内容到内存 -
获取该内存区域的文件描述符
-
调用一个接受文件描述符的库并做一些事情
我为mmap
使用的原始文件描述符当然不起作用,因为它指的是磁盘上的文件。
到目前为止,我能够将文件mmap
到内存中,但是我调用了fmemopen
,但是在调用该函数时没有设置fileno
。指针吗?
我这样做的原因是我试图减少库在处理文件中的数据时所做的复制量
从某种意义上说,你的要求似乎微不足道。从另一个意义上说,这是不可能的。
如果这个内存区域代表一个你已经mmap
编辑过的文件,那么你已经有了它的文件描述符,因为你需要这个文件描述符来调用mmap
。如果您以MAP_SHARED
模式映射它,通过文件描述符对文件的修改应该自动显示在内存中,对内存的修改也应该自动显示在文件中。这就是mmap
在MAP_SHARED
模式下的全部意义。
但是,查看手册页,您可能必须在某些系统上调用msync
,以便您对内存所做的事情显示在文件中。
malloc
或类似的方法获得了一些内存区域,然后只希望该内存区域获取文件描述符,那么这是不可能的