[英]using setvbuf to make memory buffer act like FILE*
我需要一种将内存缓冲区视为FILE*
的跨平台方法。 我看到了其他问题,这些问题指出没有可移植的方法来执行此操作(我需要linux中的fmemopen,但在Windows平台上它失败了)。
我尝试使用setvbuf,它似乎可以工作。 任何人都可以指出使用setvbuf函数的确切问题吗?
另外,我已经看到C标准草案WG14 / N1256和7.19.5.6说:
数组的内容在任何时候都是不确定的。
我不明白如果使用自己的缓冲区,如何确定缓冲区的内容?
编辑 :感谢所有的答案。 不再使用此方法。
确实没有,没有便携式的方法可以做到这一点。
使用setvbuf
似乎可以工作,但是您实际上是在调用未定义的行为,并且在意外的时候它将以意外的方式失败。 正如您所提到的,GNU C库确实具有fmemopen(3)
作为扩展,但是它不能移植到非GNU系统中。
如果您使用的某个库需要FILE*
指针,而内存中只包含所需的数据,则只需将其写到临时文件中,然后将句柄传递给该文件。 理想情况下,您的库应该提供一个替代函数,该函数采用内存指针而不是文件指针,但如果不这样做,那么您就不走运了(您应该向库编写者抱怨这种不足)。
setvbuf()
函数用于告知FILE
用作缓冲区的内存,但未指定如何使用此内存:这取决于实现。
因此,缓冲区的内容在任何时候都是不确定的,如果碰巧对您有用,那只是偶然。
这取决于您要对buffer / FILE *做些什么。 您当然可以执行简单的操作并摆脱它们,但是您不能保证所有的FILE *操作都能在您的内存缓冲区上按预期执行。
抱歉,根本没有跨平台的一线功能即可获得完整的FILE *特性,我已经尝试了很多次哈哈
您可以尝试的方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.