1

我的任务是在 C 中使用 inode 实现 Unix 命令pwd。我已经弄清楚如何递归返回,直到 '..' 的 inode 与 '.' 的 inode 相同。我现在遇到的问题是我不知道如何获取'..'的目录名称。使用 stat 结构,我可以获取有关文件的所有信息,例如大小、inode 等,但我需要获取文件,以便使其输出如下内容:

/home/GONZAGA/tcosentino/documents/OS

如何获取这些目录名称?

我有 stat 结构,所以到目前为止它可以打印出来:

[tcosentino@ada2 OS]$ ./a.out .
filename: .
 device: 64768
 inode: 55804237
 protection: 40755
 number of hard links: 5
 user ID of owner: 81963576
 group ID of owner: 501
 device type (if inode device): 0
 total size, in bytes: 4096
 blocksize for filesystem I/O: 4096
 number of blocks allocated: 8
 time of last access: 1354817261 : Thu Dec  6 10:07:41 2012
 time of last modification: 1354817249 : Thu Dec  6 10:07:29 2012
 time of last change: 1354817249 : Thu Dec  6 10:07:29 2012
4

1 回答 1

0

简单粗暴的查找当前目录名称的方法是,您必须找到父目录的名称,然后扫描父目录中列出的名称以找到具有相同 inode 编号的名称,然后设备号作为当前目录。如何找到父目录的名称?嗯,......你递归目录树,当你到达系统的根目录时停止,这是 inode 号和设备号..与 for 相同的位置.

请注意,这是一种头脑简单的方法。如果当前目录是 NFS 挂载的并且有很多主目录需要自动挂载,那么它可能会产生极其糟糕的性能。因此,必须有另一种方法可以在不触发自动挂载等的情况下做到这一点,但我还没有调查过那是什么。

我确实有具有毁灭性性能的代码,1987 年的 1.1 版,2008 年的 2.5 版(它在 Mac OS X 10.10.1 上编译,虽然我认为它失败了,但仔细检查表明它运行正确,但我误解了打印输出; 2.6 版将有更清晰的打印,所以我不会再混淆)。

于 2014-12-28T22:59:21.663 回答