glibc 2.23 中的 fflush 行为更改

fflush behavior change in glibc 2.23

从 2.23 开始,glibc 似乎已经改变了它在使用 fmemopen 创建的流的 fflush 上的行为,因为它将位置重置为 0。我在 change-log 中看到 fmemopen 的实现已更新以修复一堆错误,但这些错误中有 none 谈到了这种行为,对我来说这似乎是一个不正确的更改。我一直在尝试确定这是一个新错误,还是一个正确的修复程序。我自己的代码依赖于旧的行为,并在我更新到 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

现在 returns:

pos-1:5
pos-2:0

原来是2.23的bug。错误 was logged 并已修复。