我正在尝试编写一个 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..
读取的字节数似乎有所不同。