ストリーミング可能な音楽を mp3 ファイルとして表示する FUSE ファイルシステムを作成しようとしています。ID3v1.1 タグだけが読み取られたときにオーディオのストリーミングを開始したくないので、ファイルシステムを direct_io および max_readahead=0 でマウントします。
しかし、これを行うと (これは libid3tag が行うことでもあります)、末尾からオフセット -2880 バイトの 2752 バイトの読み取りが取得されます。
char tmp[255];
FILE* f = fopen("foo.mp3", "r");
fseek(f, -128, SEEK_END);
fread(tmp, 1, 10, f);
どうしてこれなの?サイズ 10 で、最後から正確に 128 バイトのオフセットで read の呼び出しが行われることを期待しています。
読み取られるバイトの量は多少異なるようです。