C - 更改或确定统计结构用于块大小的内容

时间:2015-10-17 18:13:25

标签: c

如此处所列:http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/stat.h.html

stat结构提供块计数和块大小。当我打印

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变量中使用的块大小,或更改它使用的块大小(一个或另一个没问题)?

1 个答案:

答案 0 :(得分:0)

POSIX文档中这样说:

  

st_blocksst_blksize的值与f_bsize(来自<sys/statvfs.h>)结构成员之间没有关联。

后者涉及文件系统本身的块大小。 st_blksize成员被记录为 file 对象的首选块大小,而不是根据其描述(我的重点)是文件系统:

  

此对象的文件系统特定的首选I / O块大小。在某些文件系统类型中,此可能因文件而异。

可能,虽然这是推测,但这是一种让您知道如果需要自己处理此文件时应该使用的块大小的方法。

例如,假设您使用的文件系统主要用于固定记录长度的文件。可能会将记录长度存储在目录信息中,这样,如果您需要对其进行处理,则该信息将对您可用。

现在,在大多数人只使用默认(ext4?)文件系统的情况下,这似乎不太可能,但是没有什么可以阻止某人为特定目的编写经过高度优化的文件系统-您通常可以绞尽脑汁提高性能由于您对某物的特性有特定的了解,而不仅仅是依靠通用的东西。实际上,我相信我们以前在HP-UX下使用的ClearCase在其人工制品存储方面做了类似的事情。