2

2.23 の時点で、glibc は fmemopen で作成されたストリームのフラッシュに対する動作を変更したようで、位置を 0 にリセットします。バグですが、これらのバグのいずれもこの動作について言及しておらず、私には間違った変更のように思えます。これが新しいバグなのか、それとも正しい修正なのかを判断しようとしています。私自身のコードは古い動作に依存しており、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
4

1 に答える 1