2014-09-29 70 views
2

假定程序打开一个用于写入的内存映射文件的情况。在将内容写入文件后立即调用exit(0)。现在我的问题是内核在这种情况下做了什么?它在关闭文件描述符时将内存映射区域的内容刷新到文件,还是丢弃缓冲区中的内容?Linux 3.14关闭过早退出的程序的文件句柄的策略

回答

2

也没有。它不会丢弃数据。通过内核中的文件/页面缓存映射的数据,并且在内核找到方便的时候(或者直到你的程序显式地发出msync()调用))将被刷新到磁盘。这与在文件描述符上执行正常write(),关闭()该文件描述符或退出程序时发生的情况几乎相同。

请记住,对该文件的访问需要经过相同的内核缓存,所以其他进程会立即看到您写入的数据,无论进程是否崩溃。 (虽然可能受到记忆障碍的影响)。

+0

当然,它也取决于调用'mmap()'的确切参数。有些情况下,写操作也会基本被忽略(即'MAP_PRIVATE'或'MAP_ANONYMOUS')... – twalberg 2014-09-29 16:33:00

+0

@nos这实际上并不适用于linux 3.14 kernel.I创建了一个程序来测试它。 http://blogs.msdn.com/b/oldnewthing/archive/2010/04/28/10003540.aspx在这里列出的视图在实际上对于linux 3.14是真实的。 – gibraltar 2014-09-30 10:58:41

+1

@gibraltar听起来像这个答案和你引用的博客帖子一致。你认为这个答案描述了哪些不是真实的行为? – Peter 2014-09-30 13:17:58