Мне нужно сохранить файл открытым после вызова mmap на нем?
У меня есть программа, которая отображает довольно много (100) больших файлов по 10-100 МБ. Мне нужно, чтобы все они отображались одновременно.
В данный момент я вызываю open
, а затем mmap
в начале программы, а затем munmap
и close
в конце.
Зачастую мне нужно настроить ограничение открытых файлов ulimit -n
перед запуском программы.
Вопрос в том, действительно ли мне нужно, чтобы файлы открывались, или я могу open
mmap
close
выполнить некоторую большую обработку данных, а затем munmap
, когда я закончил.
Человеческие страницы mmap для меня не кажутся мне ужасными.
Ответы
Ответ 1
Нет, по крайней мере, не для Linux это нормально, чтобы закрыть файл.
На странице руководства четко указано:
С другой стороны, закрытие дескриптора файла не отменяет область.
Для портативности я также проверил руководство POSIX, он говорит то же самое (хотя еще более ясно):
Функция mmap() добавляет дополнительную ссылку на файл, связанный с файловыми дескрипторами fildes, который не удаляется последующим закрытием() в этом дескрипторе файла. Эта ссылка удаляется, если в файле больше нет сопоставлений.