在Linux内核中,当我们得到“struct file”时如何识别打开的文件

时间:2011-08-11 06:49:53

标签: linux linux-kernel filesystems

在linux内核中如何识别打开的文件?当我们可以获取有关inode或(struct file)或dentry的信息时?哪种结构可以帮助我们识别打开的文件是同一个打开的文件?你能告诉我详情吗?

1 个答案:

答案 0 :(得分:3)

一个物理文件一次只有一个struct inode

在大多数文件系统上,即使struct inode被释放并稍后回读,inode编号也将保持不变,因此您可以识别(加上设备编号),但也有例外。但是至少在任何给定时间始终确保设备上只有一个文件具有特定的inode编号(这用于检查两个打开的文件句柄指向用户区域中您无法访问{{}的同一文件。 1}} - 在内核中比较指针会更容易)。

一个文件可能有更多与其关联的struct inode,在某个流程中每个文件句柄一个,并且可能有多个struct file与之关联,每个硬链接一个。

由此可见,文件系统中的任何路径只有一个struct dentry。然而,从不同的过程观点来看,路径可能看起来不同(想想chroots和名称空间)。它可以通过遍历dentries和inode链来重建(每个dentry都有父inode,每个inode都知道当前与之关联的dentries),但你必须小心避免当前进程看不到的dentries。