我看过这篇文章:system call to map memory to a file descriptor (inverse mmap)?
我想要一个我想要在其接口中有文件描述符的库,它可以被赋予一个文件描述符,该文件描述符将从我mmap
编辑该文件的内存区域读取。 / p>
我需要一些效果:
mmap
大文件(5gb)到内存的内容
获取该内存区域的文件描述符
调用获取该文件描述符并执行某些操作的库
我用于mmap
的原始文件描述符当然不起作用,因为它指的是磁盘上的文件。
到目前为止,我能够mmap
将文件存入内存,但我调用fmemopen
,但调用该函数时未设置fileno
。有什么指针吗?
我这样做的原因是我正在尝试减少库在处理文件中的数据时的复制量。
答案 0 :(得分:1)
从某种意义上说,你所提出的问题似乎微不足道。从另一个意义上讲,这是不可能的。
如果这个内存区域代表你已经mmap
编辑过的文件,那么你已经有了一个文件描述符,因为你需要那个文件描述符来调用mmap
。如果您以MAP_SHARED
模式映射它,则通过文件描述符对文件的修改应自动显示在内存中,并且对内存的修改也应自动显示在文件中。这是mmap
模式中MAP_SHARED
的重点。
但是,查看手册页,您可能需要在某些系统上调用msync
,以便将您在内存中所做的事情显示在文件中。
如果你有一些使用malloc
获得的内存区域或类似的方法,然后只想让这个内存区域获取文件描述符,那是不可能的。