我目前正在重新编写“ls”命令以进行学习。但是,当我浏览文件时: 当我尝试打开符号链接(symbolic link)指向的路径的“文件夹”时,可能会出错。因为它不是目录(我认为所有符号链接(symbolic link)都指向文件夹)。
如何检查它是否指向目录? (我看手册,stat,dir ..)
最佳答案
I thought all symbolic links pointed to folders
没有。符号链接(symbolic link)是对另一个路径的间接引用。该其他路径可以引用任何类型的文件,该文件可以在任何已安装的文件系统中表示,或者根本没有文件(即它可以是断开的链接)。
How to check that it points to a directory?
您提到了 stat()
函数,但是为了重新实现 ls
,您应该主要使用 lstat()
。不同之处在于,当指定路径引用符号链接(symbolic link)时,stat
返回有关链接目标路径的信息,而 lstat
返回有关链接本身的信息(包括有关链接的信息)文件类型,从中您可以看出它是一个链接)。
如果遇到符号链接(symbolic link),只需使用 stat()
再次检查相同的路径,找出它指向的文件类型。 stat()
会递归解析符号链接(symbolic link)来发现最终目标的信息,只有当它是一个损坏的链接时,它才是一个符号链接(symbolic link)。无论如何,您不需要为了您的特定目的区分损坏的链接和任何其他形式的非目录。
关于c - 如何检查符号链接(symbolic link)是否指向目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56066067/