繁体   English   中英

使用setvbuf使内存缓冲区的行为类似于FILE *

[英]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 *特性,我已经尝试了很多次哈哈

您可以尝试的方法:

  • #define-wrapped特定于操作系统的逻辑
  • 进一步查看您要与之交互的界面。 无论如何,它只是在玩缓冲。 然后在缓冲区中拼接。 这就是我所做的。
  • 您的技术和信念。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM