将文件描述符重定向到内存
Redirect file descriptor into memory
我使用的文件 API 在写入文件时仅提供 const char* filename
接口(接受 -
用于 stdout
)。相反,我希望将输出写入内存,这样我就可以将数据传递到其他地方。
我可以使用 dup2
将 stdout
重定向到任意文件描述符,并将 fmemopen
/open_memstream
之类的东西作为我的接收器。但是,内存流函数需要一个大小,在我的例子中,我事先不知道并且可以任意大。
但是,我需要访问的数据在生成的数据中确实具有固定的长度和偏移量(例如,在 1MB 之外,我需要从 384KB 开始的 64KB,等等)。因此,有没有办法用 fmemopen
/open_memstream
设置一个循环缓冲区,它一直被重写直到达到相关的偏移量? (我意识到这是低效的,但没有能力寻求。)
或者这是错误的方法?我已经阅读了一些关于内存映射文件的内容,这似乎与我想要实现的目标相似,但我对它了解不多......
编辑 明确一点,我无法向磁盘写入任何内容。
使用 dup2
将 stdout
重定向到管道并使用 -
调用 API 以指示它使用标准输出。然后从管道中读取API生成的数据,过滤后存入内存区域
如果管道容量不够,则需要两个线程才能使此方法生效。
一个是 运行 API 调用生成数据并将其放入管道。
另一个线程将从管道中获取数据,检查偏移量并在达到目标偏移量时将数据存储在内存中。但是继续从管道读取直到 EOF,以便另一个线程可以完成 API 调用并优雅地完成。
我使用的文件 API 在写入文件时仅提供 const char* filename
接口(接受 -
用于 stdout
)。相反,我希望将输出写入内存,这样我就可以将数据传递到其他地方。
我可以使用 dup2
将 stdout
重定向到任意文件描述符,并将 fmemopen
/open_memstream
之类的东西作为我的接收器。但是,内存流函数需要一个大小,在我的例子中,我事先不知道并且可以任意大。
但是,我需要访问的数据在生成的数据中确实具有固定的长度和偏移量(例如,在 1MB 之外,我需要从 384KB 开始的 64KB,等等)。因此,有没有办法用 fmemopen
/open_memstream
设置一个循环缓冲区,它一直被重写直到达到相关的偏移量? (我意识到这是低效的,但没有能力寻求。)
或者这是错误的方法?我已经阅读了一些关于内存映射文件的内容,这似乎与我想要实现的目标相似,但我对它了解不多......
编辑 明确一点,我无法向磁盘写入任何内容。
使用 dup2
将 stdout
重定向到管道并使用 -
调用 API 以指示它使用标准输出。然后从管道中读取API生成的数据,过滤后存入内存区域
如果管道容量不够,则需要两个线程才能使此方法生效。
一个是 运行 API 调用生成数据并将其放入管道。
另一个线程将从管道中获取数据,检查偏移量并在达到目标偏移量时将数据存储在内存中。但是继续从管道读取直到 EOF,以便另一个线程可以完成 API 调用并优雅地完成。