我需要一种将内存缓冲区视为FILE*
的跨平台方法。我已经看到其他问题指出没有可移植的方法来做到这一点(Linux中的fmemopen是我需要的,但它在Windows平台上失败了。)
我尝试过使用setvbuf,但它似乎有效。任何人都可以指出使用setvbuf函数的确切问题?
另外,我看过C标准草案WG14 / N1256和7.19.5.6说:
任何时候数组的内容都是不确定的。
我不明白我是否使用自己的缓冲区,其内容如何不确定?
编辑:感谢您的所有答案。不再使用这种方法了。
答案 0 :(得分:2)
不,真的,没有便携的方法可以做到这一点。
使用setvbuf
可能会显示,但您实际上正在调用未定义的行为,并且会在意外时间以意外方式失败。正如您所提到的,GNU C库确实有fmemopen(3)
作为扩展,但它不能移植到非GNU系统。
如果您正在使用某个需要FILE*
指针的库并且您只在内存中拥有所需数据,那么您只需要将其写入临时文件并传入处理该文件。理想情况下,你的库应该提供一个替代函数,它接受一个内存指针而不是一个文件指针,但如果没有,你运气不好(你应该向图书馆作者抱怨这个缺陷)。
答案 1 :(得分:1)
函数setvbuf()
用于告诉FILE
内存用作缓冲区,但它没有指定如何使用这个内存:这取决于实现。
因此,缓冲区的内容在任何时候都是不确定的,如果它恰好适合你,那只是偶然的。
答案 2 :(得分:1)
这取决于你想用缓冲区/ FILE *做什么。你当然可以执行简单的操作并逃脱它们,但你不能保证所有的FILE *操作都能在你的内存缓冲区中按预期运行。
对不起,根本没有跨平台的单行程来获得完整的FILE *特性,我已经多次试过了哈哈
你可以尝试: