Как избежать буферного механизма из FileSystem - PullRequest
0 голосов
/ 06 августа 2010

Возьмем виртуальный диск VirtualBox в качестве примера : если VirtualBox не избежал механизма буфера от FileSystem в хосте os, FileSystem в гостевой ОС переместит данные из памяти в meory.

Фактически, я хочу написать файловую систему в пространстве пользователя (поместить все каталоги и файлы в один большой файл) .Но если я использую c api такие fread и fwrite , FileSystem в OS будет буферизовать данные, которые моя UserSpace-FileSystem прочитает 、 write. Но моя UserSpace-FileSystem сама реализовала механизм буфера.не избежать механизма буфера от FileSystem в ОС, My UserSpace-FileSystem будет перемещать данные из памяти в память. Это так плохо.

Кто-нибудь знает, как решить эту проблему?

Ответы [ 2 ]

4 голосов
/ 06 августа 2010

stdio не поддерживает это.

Для * NIX: man open для O_DIRECT, man fadvise и man madvise.

Для Windows отметьте CreateFile для FILE_FLAG_NO_BUFFERING. Вероятно, это хорошая идея, чтобы выкопать CreateFileMapping тоже.

1 голос
/ 06 августа 2010

Ваш вопрос не очень понятен, но если все, что вы хотите сделать, это использовать stdio без буферизации, то setbuf(file, NULL); решит вашу проблему. Лучшим решением может быть полное отсутствие stdio и использование низкоуровневых примитивов io read, write и т. Д. (Не является частью простого C, но определено POSIX, и почти эквивалентные версии их доступны на большинстве системы не POSIX тоже).

...