MEM_SHARED,mmap和硬链接

时间:2011-08-13 15:02:12

标签: linux shared-memory mmap inode hardlink

只是想知道共享内存的密钥是文件名还是inode。

我有一个名为.last的文件,它只是一个名为YYYYMMDDHHMMSS的文件的硬链接。

目录如下所示:

20110101143000  
.last

.last只是20110101143000的硬链接。

一段时间后,会创建一个新文件

20110101143000  
20110622083000  
.last

然后删除.last,并重新创建它以引用新文件。

我们的软件在这些更新期间不断运行,使用MAP_SHARED mmaps .last文件。完成文件后,软件可能会将其缓存几分钟而不是取消映射。在物理服务器上,有12-24个软件实例同时运行。不同的实例通常会在同一时间映射同一个文件。我的问题是:

linux是否使用文件名键入共享内存,还是使用inode?

鉴于这种情况:

  1. proc A mmaps .last,并且不取消映射
  2. 写入一个新文件,删除.last,创建一个新的.last链接新文件 文件
  3. proc B mmaps新的.last,并且不会取消映射
  4. 如果linux使用了inode,那么proc A和B会看到映射到不同文件的不同内存块,这就是我们想要的。如果linux使用文件名,则A和B都会看到映射到新文件的同一块内存。 B很好,但是当分片块中的内存发生变化时,A会崩溃。

    任何人都知道它实际上是如何运作的?我要去测试,但如果事实证明是基于名字,我会被搞砸,除非有人知道诡计。

    谢谢!

1 个答案:

答案 0 :(得分:3)

这是inode,至少是有效的。也就是说,一旦您从文件中映射了一些页面,它们将继续引用该文件,并且不会因为文件系统中名称到文件的映射发生变化而改变。