【问题标题】:FUSE fseek unexpected behaviour with direct_ioFUSE fseek 使用 direct_io 的意外行为
【发布时间】:2010-12-07 14:03:53
【问题描述】:

我正在尝试编写一个 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..

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

【问题讨论】:

  • 用 read 代替 fread 没有区别。
  • 我的临时解决方案是在 ID3v1.1 标签之前的末尾添加 8192 字节的填充。不漂亮,但它似乎工作。

标签: fuse fseek


【解决方案1】:

我遇到过类似的问题,并已向 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-08
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多