Главная

Файлы, отображаемые в память

Перевод статьи http://old.beunited.org/articles/jbq/mmap.shtml
Жан–Батист М. Керуdjaybee@cyberdude.com
BeDevID #E–1145

Многие разработчики, портирующие unix приложения в BeOS, обратили внимание, что BeOS не имеет стандартных средств для работы с файлами, отображенными в память. В этой статье будет рассказано об одном решении, которое вы можете использовать для того, чтобы обойти это ограничение.

ОБРАТИТЕ ВНИМАНИЕ, что это не замена POSIX функции mmap(). Исходнному unix коду требуется некоторая переработка, если вы захотите использовать этот прием. Существуют случаи, когда этот код использовать невозможно.

Что такое «файл отображенный в память»?
Файл отображенный в память — простейший «путь» связать какую–либо область памяти с блоком файла. По существу это поименованный файл подкачки, следовательно единственный путь использовать этот прием в BeOS — скопировать ваш файл в файл подкачки.

Существует еще любопытный побочный эффект, при использовании файлов, отображенных в память — если приложение завершается (даже аварийно), имея незакрытые файлы, отображенные в память, то данные, которые должны были быть записаны, пишутся на диск.

В чем–же заключается этот способ?
BeOS уже имеет встроенный механизм «подчистки» ресурсов и при завершении вашего приложения любой незакрытый файл или устройство автоматически закрывается ядром. Этот механизм очень простой, по крайней мере вы увидите это в примере, идущем с этой статьей. Это довольно несложный драйвер, т.к. не надо управлять любым железом и он имеет довольно простую модель блокировки.

Кроме обычной драйверной логики, он имеет три функции: mmap_map — «отображает» файл в память,
mmap_wback() — пишет блок памяти на диск и
mmap_unmap — освобождает занятый блок памяти. Еще код содержит немного проверок на ошибки и очень много отладочной информации.

В принципе это все, если этот драйвер буде вам полезен, не поленитесь напишите мне об этом.

Примеры кода — %primer_drajjvera_fajjlov_otobrazhaemykh_v_pamjat%.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
d
K
H
q
N
L
Enter the code without spaces and pay attention to upper/lower case.