Подтвердить что ты не робот

Мне нужно сохранить файл открытым после вызова mmap на нем?

У меня есть программа, которая отображает довольно много (100) больших файлов по 10-100 МБ. Мне нужно, чтобы все они отображались одновременно.

В данный момент я вызываю open, а затем mmap в начале программы, а затем munmap и close в конце.

Зачастую мне нужно настроить ограничение открытых файлов ulimit -n перед запуском программы.

Вопрос в том, действительно ли мне нужно, чтобы файлы открывались, или я могу open mmap close выполнить некоторую большую обработку данных, а затем munmap, когда я закончил.

Человеческие страницы mmap для меня не кажутся мне ужасными.

4b9b3361

Ответ 1

Нет, по крайней мере, не для Linux это нормально, чтобы закрыть файл.

На странице руководства четко указано:

С другой стороны, закрытие дескриптора файла не отменяет область.

Для портативности я также проверил руководство POSIX, он говорит то же самое (хотя еще более ясно):

Функция mmap() добавляет дополнительную ссылку на файл, связанный с файловыми дескрипторами fildes, который не удаляется последующим закрытием() в этом дескрипторе файла. Эта ссылка удаляется, если в файле больше нет сопоставлений.