c - 如何查找目录的链接数

标签 c operating-system posix

mkdir d
mkdir d/a
mkdir d/b
mkdir d/c

在终端中执行这些命令时,目录 d 的链接计数是多少?

最佳答案

在 POSIX 系统上,您可以使用 stat() syscall读取st_nlink以获取任何文件或目录的硬链接(hard link)数量,根据包含它的文件系统定义为“硬链接(hard link)数量”

但是 POSIX 实际上并没有定义目录的“硬链接(hard link)数量”的含义。目录不能有硬链接(hard link),因此理论上它们的硬链接(hard link)计数始终为 1。

不同的文件系统使用st_nlink来转发有关目录的不同信息:

在 Linux (ext4) 上,st_nlink 表示该目录的子目录数量及其特殊条目:

$ 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) 将其定义为该目录中所有条目的数量,加上其特殊条目:

$ 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/ # with GNU coreutils
8

因此,如果您运行问题中的命令,您将得到 8。

关于c - 如何查找目录的链接数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59241962/

相关文章:

cpu屏蔽和禁用内核中断

c - 难以理解 fork() 和进程树

python - 恢复用python删除的文件

performance - 用信号实现TCP/IP套接字客户端服务器是个好主意吗?

c - 中断(n)诅咒传入信号

c - 对于每个 int x : x+1 > x . ... 这总是正确的吗?

c - 在核心上运行用户任务并最小化中断/抢占

c - 如何检测当前进程是否正在由 GDB 运行

c - 本地时间返回空

fork() 的输出困惑