繁体   English   中英

在linux中,如何为内存区域创建文件描述符

[英]In linux , how to create a file descriptor for a memory region

我有一些程序在文件或某些内存缓冲区中处理一些数据。 我想提供统一的方法来处理这些案件。

我可以1)mmap文件,以便我们可以统一处理它们作为内存缓冲区; 2)使用fopen和fmemopen创建FILE *,以便将它们统一访问为FILE *。

但是,我无法使用上述任何一种方法。 我需要将它们作为文件描述符处理,因为我使用的其中一个库只接受文件描述符,并且它在文件描述符上进行mmap。

所以我的问题是,给定一个内存缓冲区(我们可以假设它与4K对齐),我们可以得到一个由这个内存缓冲区支持的文件描述符吗? 我在其他一些问题中看到popen是一个答案,但我不认为popen中的fd可以是mmap-ed。

您无法从“某些内存区域”轻松创建文件描述符(除了C标准库之外,没有帮助)。 但是,您可以创建共享内存区域 ,获取文件描述符作为回报。

来自shm_overview(7)

的shm_open(3)
创建并打开新对象,或打开现有对象。 这类似于open(2)。 该调用返回一个文件描述符 ,供下面列出的其他接口使用。

列出的接口中有mmap ,这意味着你可以像对内存映射常规文件一样“内存映射”共享内存。

因此, 如果只控制 “内存缓冲区”的创建那么对两种情况(文件或内存缓冲区)使用mmap都应该无缝工作。

您可以将您的数据段(可能使用mmap )写入基于tmpfs的文件(可能位于/run/目录下),然后将打开的文件描述符传递给您的库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM