FUSE fseek неожиданное поведение с direct_io - PullRequest
2 голосов
/ 07 декабря 2010

Я пытаюсь написать файловую систему 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 голосов
/ 16 декабря 2011

У меня была похожая проблема и я подал проблему с s3fs.Проблема оформления заказа: http://code.google.com/p/s3fs/issues/detail?can=2&q=&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary&groupby=&sort=&id=241

дополнительно, строка оформления заказа 1611 в файле s3fs.cpp:

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

 // error check this

 // fseek (pSourceFile , 0 , SEEK_END);
...