c-在调用mmap之后是否需要保持文件打开?

我有一个程序可以映射许多(100个)每个10-100MB的大小可观的文件。 我需要同时映射它们。

目前,我在程序开始时先致电mmap,再致电mmap,最后再致电closemunmap

通常,我必须在运行程序之前调整运行mmap的打开文件的限制。

问题是我实际上是否需要保持文件打开状态,还是可以mmap mmap close做一些大数据处理,然后在完成后进行munmap

mmap的手册页在我看来并不十分清楚。

camelccc asked 2020-01-13T01:24:11Z
1个解决方案
58 votes

不,至少在Linux上不能关闭文件。

手册页明确指出:

另一方面,关闭文件描述符不会取消映射区域。

为了可移植性,我还检查了POSIX手册,它说了同样的话(尽管更加清楚):

mmap()函数为与文件描述符fildes关联的文件添加了额外的引用,该引用不会被该文件描述符上的后续close()删除。 没有更多的文件映射时,将删除此引用。

unwind answered 2020-01-13T01:24:48Z
translate from https://stackoverflow.com:/questions/17490033/do-i-need-to-keep-a-file-open-after-calling-mmap-on-it