gpt4 book ai didi

c - macOS:以编程方式获取卷中已使用的 inode 数量

转载 作者:行者123 更新时间:2023-11-30 14:49:14 27 4
gpt4 key购买 nike

我想使用函数 API 获取指定卷的已用 inode 数量,而不是使用 df shell 命令的输出。

我查看了getattrlist的手册页,发现了以下属性,但它也可能引用硬链接(hard link),但它们指向现有的inode,我不想计数他们不止一次。

ATTR_VOL_FILECOUNT        A u_int32_t containing the number of files on the volume.

我还尝试运行 dtruss df 并搜索检索该值的确切系统调用,但我无法确定它:

csops(0x872, 0x7, 0x7FFEEE4C8E80)        = 0 0
sysctl([CTL_KERN, 14, 1, 2162, 0, 0] (4), 0x7FFEEE4C8FC8, 0x7FFEEE4C8FC0, 0x0, 0x0) = 0 0
csops(0x872, 0x7, 0x7FFEEE4C8770) = 0 0
getfsstat64(0x0, 0x0, 0x2) = 6 0
getfsstat64(0x7FFD41001600, 0x3B48, 0x2) = 6 0
getfsstat64(0x7FFD41001600, 0x3B48, 0x1) = 6 0
getrlimit(0x1008, 0x7FFEEE4C9EC0, 0x0) = 0 0
fstat64(0x1, 0x7FFEEE4C9ED8, 0x0) = 0 0
ioctl(0x1, 0x4004667A, 0x7FFEEE4C9F24) = 0 0

这是 df 输出(注意 used 字段)

Filesystem    512-blocks      Used Available Capacity iused               ifree %iused  Mounted on
/dev/disk1s1 976695384 757288824 211770792 79% 2000778 9223372036852775029 0% /

有什么想法可以在哪里找到 df 的源代码或用于此任务的其他 API。

谢谢

最佳答案

我想我找到了the source它执行以下操作:

if (iflag) {
inodes = sfsp->f_files;
used = inodes - sfsp->f_ffree;
(void)printf(" %*llu %*llu %4.0f%% ", mwp->iused, used,
mwp->ifree, sfsp->f_ffree, inodes == 0 ? 100.0 :
(double)used / (double)inodes * 100.0);

其中 sfsp 是指向 struct statfs 实例的指针,来自 statfs() 就像您所期望的那样。

关于c - macOS:以编程方式获取卷中已使用的 inode 数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49790488/

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