Я работаю над переносом некоторого кода из AIX в Linux. Части кода используют системный вызов shmat ()
для создания новых файлов. При использовании с SHM_MAP
в режиме с возможностью записи можно расширить файл за пределы его исходной длины (в моем случае - нуля):
Когда файл отображается на сегмент, на файл ссылается доступ к сегменту. Система подкачки памяти автоматически выполняет физические операции ввода-вывода. Ссылки за пределами конца файла вызывают расширение файла с приращением размера страницы. Файл не может быть расширен за границу следующего сегмента.
(«Сегмент» в AIX - это блок адресного пространства размером 256 МБ, а «страница» обычно составляет 4 КБ.)
Что бы я сделал например, в Linux нужно сделать следующее:
Я знаю, что могу сделать это в Windows с помощью VirtualProtect , бит защиты памяти PAGE_GUARD
и структурированный обработчик исключений . Каков соответствующий метод в Linux, чтобы сделать то же самое? Может быть, есть лучший способ реализовать эту функцию расширения при записи в Linux?
Я уже рассмотрел:
mmap ()
с некоторым фиксированным большим размером, но я не могу сказать, какая часть файла была записана кодом приложения mmap ()
сам по себе, похоже, не предоставляет никаких средств для увеличения длины файла поддержки Естественно, я хотел бы сделать это с минимальными изменениями в коде приложения.