在linux内核中如何识别打开的文件?当我们可以获取有关inode或(struct file)或dentry的信息时?哪种结构可以帮助我们识别打开的文件是同一个打开的文件?你能告诉我详情吗?
答案 0 :(得分:3)
一个物理文件一次只有一个struct inode
。
在大多数文件系统上,即使struct inode
被释放并稍后回读,inode编号也将保持不变,因此您可以识别(加上设备编号),但也有例外。但是至少在任何给定时间始终确保设备上只有一个文件具有特定的inode编号(这用于检查两个打开的文件句柄指向用户区域中您无法访问{{}的同一文件。 1}} - 在内核中比较指针会更容易)。
一个文件可能有更多与其关联的struct inode
,在某个流程中每个文件句柄一个,并且可能有多个struct file
与之关联,每个硬链接一个。
由此可见,文件系统中的任何路径只有一个struct dentry
。然而,从不同的过程观点来看,路径可能看起来不同(想想chroots和名称空间)。它可以通过遍历dentries和inode链来重建(每个dentry都有父inode,每个inode都知道当前与之关联的dentries),但你必须小心避免当前进程看不到的dentries。