我有一个程序可以映射相当多的(100个)大小的文件,每个文件10-100MB。我需要它们全部同时映射。
目前我在节目开始时调用open
后跟mmap
,最后是munmap
和close
。
通常我必须在运行程序之前调整运行ulimit -n
的打开文件限制。
问题是,我确实需要保持文件处于打开状态,或者open
mmap
close
在完成后可以munmap
进行一些大数据处理。
mmap
的手册对我来说似乎不太清楚。
答案 0 :(得分:56)
不,至少在Linux上不能关闭文件。
The manual page明确指出:
另一方面,关闭文件描述符不会取消映射该区域。
为了便携性,我还检查了POSIX manual,它说同样的事情(虽然更清楚):
mmap()函数添加对与文件描述符 fildes 关联的文件的额外引用,后者不会被后续的 close()删除在那个文件描述符上。当没有更多映射到文件时,将删除此引用。