glibc 2.23中的fflush行为改变

glibc 2.23中的fflush行为改变,c,glibc,fflush,C,Glibc,Fflush,从2.23开始,glibc似乎已经改变了它在使用fmemopen创建的流的fflush上的行为,因为它将位置重置为0。我在一篇文章中看到,fmemopen的实现被更新以修复一堆bug,但是这些bug中没有一个谈到这种行为,对我来说,这似乎是一个不正确的更改。我一直在试图确定这是一个新的错误,还是一个正确的修复。我自己的代码依赖于旧的行为,并在我更新到Ubuntu16.04(Glibc2.23附带)后崩溃。有人知道这件事吗 下面是一些示例代码: char buffer[500] = "x"; FI

从2.23开始,glibc似乎已经改变了它在使用fmemopen创建的流的fflush上的行为,因为它将位置重置为0。我在一篇文章中看到,fmemopen的实现被更新以修复一堆bug,但是这些bug中没有一个谈到这种行为,对我来说,这似乎是一个不正确的更改。我一直在试图确定这是一个新的错误,还是一个正确的修复。我自己的代码依赖于旧的行为,并在我更新到Ubuntu16.04(Glibc2.23附带)后崩溃。有人知道这件事吗

下面是一些示例代码:

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下),这是2.23中的一个bug。这个bug已经被修复。

这在我看来确实是一个倒退,而且是一个非常严重的倒退。
fflush()
不应导致文件位置恢复为0。如果这是故意的,那么发行说明中肯定不会提及这种更改。我目前正在运行一个更旧的glibc,但我确认它的行为与您描述的旧glibc相同。如果还没有错误报告,我会提交错误报告。耶,这看起来像是一个错误对我来说也是一个大问题。目前我正在IRC#glibc上与那里的一些维护人员交谈,以确认这是一个bug。
pos-1:5
pos-2:5
pos-1:5
pos-2:0