73

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

目前我在程序开始时调用,然后open在程序结束时调用。mmapmunmapclose

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

问题是我是否真的需要保持文件打开,或者我可以在完成后open mmap close进行一些大数据处理munmap

我对这个的手册页mmap似乎不是很清楚。

4

1 回答 1

80

不,至少不是在 Linux 上关闭文件就可以了。

手册页明确指出:

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

为了便携性,我还检查了POSIX 手册,它说的是同样的事情(尽管更清楚):

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

于 2013-07-05T13:34:20.903 回答