C 如何查找目录的链接计数
在终端中执行这些命令时,目录d的链接计数是多少?在POSIX系统上,您可以使用C 如何查找目录的链接计数,c,operating-system,posix,C,Operating System,Posix,在终端中执行这些命令时,目录d的链接计数是多少?在POSIX系统上,您可以使用stat()读取st_nlink以获得任何文件或目录的硬链接数,根据包含它的文件系统定义为“硬链接数” 但是POSIX并没有真正定义目录的“硬链接数”的含义。目录不能有硬链接,因此其理论硬链接计数始终为1 不同的文件系统使用st_nlink传递有关目录的不同信息: 在Linux(ext4)上,st_nlink表示该目录的子目录数及其特殊条目: mkdir d mkdir d/a mkdir d/b mkdir d/c
stat()
读取st_nlink
以获得任何文件或目录的硬链接数,根据包含它的文件系统定义为“硬链接数”
但是POSIX并没有真正定义目录的“硬链接数”的含义。目录不能有硬链接,因此其理论硬链接计数始终为1
不同的文件系统使用st_nlink
传递有关目录的不同信息:
在Linux(ext4)上,st_nlink
表示该目录的子目录数及其特殊条目:
mkdir d
mkdir d/a
mkdir d/b
mkdir d/c
$ ls -F d/
a/ b/ c/ d e f
$ ls -a d/
. .. a b c d e f
$ ls -a d/ | wc -l
8
$ ls -al d/ | grep ^d | wc -l
5
$ stat --printf %h d/
5
因此,如果您运行问题中的命令,您将得到5
另一方面,MacOS(apfs)将其定义为该目录中所有条目的数量,加上其特殊条目:
mkdir d
mkdir d/a
mkdir d/b
mkdir d/c
$ ls -F d/
a/ b/ c/ d e f
$ ls -a d/
. .. a b c d e f
$ ls -a d/ | wc -l
8
$ ls -al d/ | grep ^d | wc -l
5
$ stat --printf %h d/
5
因此,如果您运行问题中的命令,您将得到8。您是在寻找C代码来获得链接计数,还是只是一个命令?如果是后者,
ls-ld
将在输出的第二列给出链接计数。它显示为5。它是如何计算出那个值的呢?a
,b
,c
,
,,@kaylum:或者更确切地说,d
,d/,d/a/。
,d/b/。
,d/c/。
。