gpt4 book ai didi

c - Unix 获取目录名称使用 .或者

转载 作者:太空宇宙 更新时间:2023-11-04 04:52:31 26 4
gpt4 key购买 nike

我的任务是在 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

最佳答案

简单、半暴力的查找当前目录名的方法是先找到父目录名,然后扫描父目录中列出的名称,找到相同的inode 号和设备号作为当前目录。你如何找到父目录的名称?好吧,...你递归目录树,当你到达系统的根时停止,这是 .. 的 inode 号和设备号与 相同的地方。

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

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

关于c - Unix 获取目录名称使用 .或者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13750089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com