【问题标题】:Do I need to keep a file open after calling mmap on it?调用 mmap 后是否需要保持文件打开?
【发布时间】:2013-07-03 14:59:36
【问题描述】:

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

目前我在程序开始时调用open,然后是mmap,最后是munmapclose

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

问题是我真的需要保持文件打开,还是我可以open mmap close 做一些大数据处理然后munmap 完成后。

mmap 的手册页对我来说似乎不是很清楚。

【问题讨论】:

  • 您可以在可执行文件的系统调用跟踪(例如strace)中看到,共享库的映射遵循以下模式:打开描述符,映射它,关闭描述符。跨度>

标签: c mmap


【解决方案1】:

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

The manual page 明确指出:

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

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

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

【讨论】:

  • 为什么proc/<pid>/fd 不包含映射文件的信息?是不是因为mmapsyscall,所以这些fds 在内核的数据结构上? 找朋友
猜你喜欢
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
相关资源
最近更新 更多