gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:01:04 25 4
gpt4 key购买 nike

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

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

但是,我不能使用上面的任何一种方式。我需要将它们都作为文件描述符来处理,因为我使用的库之一只接受文件描述符,并且它对文件描述符执行 mmap。

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

最佳答案

你不能轻易地从“一些内存区域”创建一个文件描述符(C 标准库除外,它没有帮助)。但是,您可以创建一个共享内存区域,作为返回获取一个文件描述符。

来自 shm_overview (7) :

shm_open(3)
Create and open a new object, or open an existing object. This is analogous to open(2). The call returns a file descriptor for use by the other interfaces listed below.

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

因此,在两种情况(文件或内存缓冲区)中使用 mmap 应该可以无缝工作,只要您控制“内存缓冲区”的创建

关于linux - 在linux中,如何为内存区域创建文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12081720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com