2013-07-05 33 views
40

我有一个程序,映射不少(100)的大文件每个10-100MB。我需要他们全部映射在同一时间。是否需要在调用mmap之后打开文件?

此刻,我打电话open,然后在节目开始时接着拨打mmap,然后在末尾拨打munmapclose

在运行程序之前,我经常需要调整运行ulimit -n的打开文件限制。

问题是我真正需要的文件保存的开放,或者我可以openmmapclose做一些大型的数据处理,然后munmap当我finnished。

对于我来说,mmap的手册页在这一页上似乎并不太清楚。

回答

46

不,至少不是在Linux上关闭文件很好。

The manual page明确规定:

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

对于便携性,我也查了POSIX manual,它说同样的事情(虽然更明确地):

mmap()的功能增加了额外的参考与这些相关的文件文件描述符fildes它不会被随后的close()删除该文件描述符。当没有更多映射到文件时,此引用将被删除。

+0

为什么'proc//fd'不包含mmapped文件的信息?是因为'mmap'是一个'syscall',所以这些fds是在内核的数据结构上?给朋友_ – Paschalis

相关问题