2010-12-07 21 views
2

ストリーム可能な音楽をmp3ファイルとして表示するFUSEファイルシステムを作成しようとしています。 ID3v1.1タグが読み込まれたときにオーディオをストリーミングしたくないので、direct_ioとmax_readahead = 0のファイルシステムをマウントします。FUSE fseek direct_ioで予期しない動作が発生する

しかし、私は(libid3tagが何をするかもある)、これを行う際に端から-2880バイトをオフセットして、私が手2752バイトの読み込み:

char tmp[255]; 
FILE* f = fopen("foo.mp3", "r"); 
fseek(f, -128, SEEK_END); 
fread(tmp, 1, 10, f); 

これはなぜでしょうか?私は、サイズ10の最後からちょうど128バイトのオフセットで読み込むことを期待しています。

読み込まれるバイト数は多少異なるようです。

+0

は、読み取りと関数freadを交換するには違いはありません。 –

+0

私の一時的な解決策は、最後にID3v1.1タグの前に8192バイトのパディングを追加することです。きれいではありませんが、うまくいくようです。 –

答えて