如此处所列:http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/stat.h.html
统计结构提供块计数和块大小。当我打印
printf("BLOCK COUNT: %ju\n", statp->st_blocks);
它返回的值比ls -ls
高。 (换句话说,它使用的是较小的块大小。)
特别是,它使用512字节,因为如果我执行ls -ls --block-size=512
,我将得到相同的结果。
但是,当我这样做:
printf("BLOCK SIZE: %ju\n", statp->st_blksize);
我得到1048576
。
是否可以通过编程方式获取st_blocks变量中使用的块大小,或更改其使用的块大小(一个或另一个很好)?
POSIX文档说:
[
st_blocks
和st_blksize
的值与f_bsize
(从<sys/statvfs.h>
起)结构成员之间没有相关性。
后者涉及文件系统本身的块大小。 st_blksize
成员记录为file对象的preferred块大小,而不是文件系统的描述(根据我的强调):
尽管这是推测,但这是一种让您知道如果需要自己处理此文件时应该使用的块大小的方法。例如,假设您使用的文件系统主要用于固定记录长度的文件。可能会将记录长度存储在目录信息中,这样,如果您需要对其进行处理,则该信息将对您可用。[>在某些文件系统类型中,此可能因文件而异。
可能,
现在,在绝大多数人只使用默认(ext4?)文件系统的情况下,这似乎不太可能,但是没有什么能阻止某人为特定目的编写经过高度优化的文件系统-您通常可以浪费更多的性能。由于您对某物的特性有特定的了解,而不仅仅是依靠通用的东西。实际上,我相信我们以前在HP-UX下使用的ClearCase在其人工制品存储方面做了类似的事情。