【发布时间】: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 字节的填充。不漂亮,但它似乎工作。