FUSE fseek使用direct_io意外行为

时间:2010-12-07 14:03:53

标签: fuse fseek

我正在尝试编写一个FUSE文件系统,将可流式音乐呈现为mp3文件。我只是在读取ID3v1.1标签时不想开始流式传输音频,因此我使用direct_io和max_readahead = 0挂载文件系统。

但是当我这样做(这也是libid3tag所做的)时,我从末尾读取了2752个字节,偏移量为-2880字节:

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

这是为什么?我希望得到一个调用读取偏移量恰好是128字节的结尾,大小为10 ..

读取的字节数似乎有所不同。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题并提出了s3fs的问题。结帐问题:http://code.google.com/p/s3fs/issues/detail?can=2&q=&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary&groupby=&sort=&id=241

另外,s3fs.cpp中的结帐行1611:

http://code.google.com/p/s3fs/source/browse/trunk/src/s3fs.cpp?r=316

 // error check this

 // fseek (pSourceFile , 0 , SEEK_END);