将文件描述符重定向到内存

Redirect file descriptor into memory

我使用的文件 API 在写入文件时仅提供 const char* filename 接口(接受 - 用于 stdout)。相反,我希望将输出写入内存,这样我就可以将数据传递到其他地方。

我可以使用 dup2stdout 重定向到任意文件描述符,并将 fmemopen/open_memstream 之类的东西作为我的接收器。但是,内存流函数需要一个大小,在我的例子中,我事先不知道并且可以任意大。

但是,我需要访问的数据在生成的数据中确实具有固定的长度和偏移量(例如,在 1MB 之外,我需要从 384KB 开始的 64KB,等等)。因此,有没有办法用 fmemopen/open_memstream 设置一个循环缓冲区,它一直被重写直到达到相关的偏移量? (我意识到这是低效的,但没有能力寻求。)

或者这是错误的方法?我已经阅读了一些关于内存映射文件的内容,这似乎与我想要实现的目标相似,但我对它了解不多......


编辑 明确一点,我无法向磁盘写入任何内容。

使用 dup2stdout 重定向到管道并使用 - 调用 API 以指示它使用标准输出。然后从管道中读取API生成的数据,过滤后存入内存区域

如果管道容量不够,则需要两个线程才能使此方法生效。

一个是 运行 API 调用生成数据并将其放入管道。

另一个线程将从管道中获取数据,检查偏移量并在达到目标偏移量时将数据存储在内存中。但是继续从管道读取直到 EOF,以便另一个线程可以完成 API 调用并优雅地完成。