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

时间:2013-07-05 13:25:41

标签: c mmap

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

目前我在节目开始时调用open后跟mmap,最后是munmapclose

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

问题是,我确实需要保持文件处于打开状态,或者open mmap close在完成后可以munmap进行一些大数据处理。

mmap的手册对我来说似乎不太清楚。

1 个答案:

答案 0 :(得分:56)

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

The manual page明确指出:

  

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

为了便携性,我还检查了POSIX manual,它说同样的事情(虽然更清楚):

  

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