Do I need to keep a file open after calling mmap on it?

CMmap

C Problem Overview


I have a program that maps quite a few (100's) of sizable files 10-100MB each. I need them all mapped at the same time.

At the moment I am calling open followed by mmap at the beginning of the program, followed by munmap and close at the end.

Often I have to adjust the open files limit running ulimit -n before running the program.

Question is do I actually need to keep the files open, or can I open mmap close do some large data processing then munmap when I'm finished.

The man pages of mmap do not seem terribly clear to me on this one.

C Solutions


Solution 1 - C

No, at least not on Linux it's fine to close the file.

The manual page clearly states:

> On the other hand, closing the file descriptor does not unmap the region.

For portability, I also checked the POSIX manual, it says the same thing (although even more clearly):

> The mmap() function adds an extra reference to the file associated with the file descriptor fildes which is not removed by a subsequent close() on that file descriptor. This reference is removed when there are no more mappings to the file.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestioncamelcccView Question on Stackoverflow
Solution 1 - CunwindView Answer on Stackoverflow