【发布时间】:2015-08-18 13:41:13
【问题描述】:
我正在使用一个文件 API,它在写入文件时只提供一个 const char* filename 接口(接受 - 为 stdout)。相反,我希望将输出写入内存,这样我就可以将数据传递到其他地方。
我可以使用dup2 将stdout 重定向到任意文件描述符,并将fmemopen/open_memstream 作为我的接收器。但是,内存流函数需要一个大小,在我的情况下,我事先并不知道,并且可以任意大。
但是,我需要访问的数据在生成的数据中确实具有固定的长度和偏移量(例如,在 1MB 之外,我需要从 384KB 开始的 64KB 等)。因此,有没有办法用fmemopen/open_memstream 设置一个循环缓冲区,它会一直被重写,直到达到有问题的偏移量? (我意识到这是低效的,但没有能力寻求。)
或者这是错误的方法?我已经阅读了一些关于内存映射文件的内容,这似乎与我想要实现的目标相似,但这并不是我所了解的......
编辑为了清楚起见,我无法将任何内容写入磁盘。
【问题讨论】:
-
便携性怎么样?想到使用
/dev/fd/?并在不同的线程/进程中读取。 -
谢谢,@Diego:这种方法很有效,而且很容易实现。如果您将其发布为答案,我会接受它(同时提供没有更好的建议!)
标签: c posix memory-mapped-files circular-buffer