glibc中的fflush行为改变2.23

时间:2016-04-26 18:05:36

标签: c glibc fflush

从2.23开始,glibc似乎改变了它在fmemopen创建的流的fflush上的行为,因为它将位置重置为0.我在change-log中看到fmemopen的实现已更新修复一堆错误,但这些错误都没有谈到这种行为,而对我来说这似乎是一个不正确的变化。我一直在试图确定这是一个新的错误,还是一个正确的修复。我自己的代码依赖于旧的行为,并在我更新到带有glibc 2.23的Ubuntu 16.04之后破了。有人对此有所了解吗?

以下是一些示例代码:

char buffer[500] = "x";
FILE *stream;
stream = fmemopen(buffer, 500, "r+");

fwrite("fish",sizeof(char),5,stream);
printf("pos-1:%ld\n",ftell(stream));
fflush(stream);
printf("pos-2:%ld\n",ftell(stream));

在早期版本上(例如在ubuntu 5.10<下),这将导致:

pos-1:5
pos-2:5

现在它返回:

pos-1:5
pos-2:0

1 个答案:

答案 0 :(得分:3)

事实证明这是2.23中的一个错误。错误internal slot并已修复。