一种可能的方法是,将给定的inode与该目录中的inode列表进行比较。可以预先确定inode列表,也可以计算运行时间,两种方式都有自己的问题:
预定列表:在此操作过程中可以更改列表,即可以在该目录中添加或删除文件。
运行时列表:如果该目录包含太多文件,则每次访问系统中的任何文件都会产生过多的开销。
这有什么有效的解决方案/方法吗?我试过通过它的路径比较文件,这真是一个坏主意。
答案 0 :(得分:0)
如果在内核模式或用户模式下执行此操作没有任何优势。要查看inode确实在某个目录中,您必须读取该目录,因为文件通常作为线性列表位于目录中。如果没有缓存,这可能会导致进程阻塞目录块,并且在此时,可以修改目录内容。只有在执行该操作时保持目录inode被阻止才有帮助,但这会给操作系统增加严重的性能限制。另一个问题是每个文件系统都可以自由地以其自己的格式实现目录内容。在userland中,您获得统一的目录格式,但在内核模式下,您必须处理不同文件系统类型的不同方法。你为什么需要知道这个?我无法想象这可能需要这样的场景。也许你可以为目录内容重新设计你的算法是不必要的。
顺便说一句,处理完整路径或搜索目录时,会遇到模糊的竞争条件,这些条件可能会导致系统被阻塞。如果在你的搜索过程中有人试图取消你正在搜索的inode的链接,会发生什么?或者必须修改目录内容;或者其他一些进程使用namei()
向上遍历您的目录;或向下。您是否考虑过所有这些可能性?