为了使问题有意义,让我指导您完成整个测试用例,所以请多多包涵。
让我们创建一个文件。
回声 0 > ~/SAMPLE
这会生成一个大小为 2 字节的简单文件(默认情况下,echo 会附加新行,这不会影响示例)。
stat -f "%b %Z" ~/SAMPLE
输出:
8 2
正如预期的那样,这个文件分配了 8 个块,大小为 2 个字节(在 Finder 中获取信息告诉我们,它是 2 个字节长,磁盘上 4k,即 8 个块 * 512 个字节/块),所以一切都很好。
现在让我们添加一个属性,特别是资源分支:
xattr -w com.apple.ResourceFork 000000 ~/SAMPLE
让我们再次调用 stat:
stat -f "%b %Z" ~/SAMPLE
输出:
16 2
添加资源分叉属性后,文件系统为该文件分配了 16 个块。
ls -l@ ~/SAMPLE
输出:
com.apple.ResourceFork 6
总结一下:我们在资源分支中添加了 6 个字节,这个文件现在分配了 16 个块(在添加资源分支之前只有 8 个),内容只有 2 个字节,资源分支有 6 个字节。
如果我们通过 NSURL API 运行这个文件,我们会得到:
NSURL *url = [NSURL fileURLWithPath:@"~/SAMPLE"];
[url getResourceValue:&size forKey: NSURLFileSizeKey错误:nil]; // 输出:2
[url getResourceValue:&size forKey: NSURLFileAllocatedSizeKey错误:nil]; // 输出:4096
[url getResourceValue:&size forKey: NSURLTotalFileAllocatedSizeKey错误:nil]; // 输出:8192
所以我的问题是,如果只使用系统调用(bash 或系统 API),我们将如何获得 4096,即NSURLFileAllocatedSizeKey键的结果?
NSURLFileSizeKey 很简单——我们可以只使用 ls -l 例如,也可以用于 NSURLTotalFileAllocatedSizeKey——我们可以使用 stat (16) 中的块数并乘以 512,但是我们如何获得NSURLFileAllocatedSizeKey的值,即 4096 in这个案例?
据我了解,如果我们要删除资源分支属性,它将是NSURLFileAllocatedSizeKey键返回的值,但是我们如何使用系统 API 或 bash 获取该值?