我的任务是使用C中的inode实现Unix命令pwd
。我已经弄清楚如何递归返回,直到'..'的inode与'。'的inode相同。我现在遇到的问题是我不知道如何获取目录名称“..”。使用stat结构我可以得到关于文件的所有内容,如size,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
答案 0 :(得分:0)
查找当前目录名称的简单,半暴力方法意味着您必须找到父目录的名称,然后扫描父目录中列出的名称以找到具有相同目录的名称inode编号和设备编号作为当前目录。你如何找到父目录的名称?好吧,...你递归目录树,当你到达系统的根目录时停止,这是..
的inode编号和设备编号与.
相同的地方。
请注意,这是一种头脑简单的方法。如果当前目录是NFS挂载并且有许多主目录要自动挂载,那么它可能会产生破坏性的糟糕性能。因此,必须有另一种方法来实现它而不触发自动挂载等,但我还没有调查它是什么。
我的代码具有破坏性的性能,从1987年的1.1版本,从2008年的2.5版本(它在Mac OS X 10.10.1上编译,虽然我认为它失败了,但仔细审查表明它运行正常,但我误解了打印输出;版本2.6将有更清晰的打印,所以我不会再次感到困惑。)