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