lstat()st_blocks输出的值不正确

问题描述:

每当我为每个目录运行我的程序时,即使使用ls-ls检查每个目录的实际大小,也会输出8。 林试图打印所有的目录的用户输入lstat()st_blocks输出的值不正确

#include <stdio.h> 
#include <dirent.h> 
#include <string.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
int main(int argc, char**argv) 
{ 

    struct stat path_stat; 
    int i; 
    int size=0; 
    for (i=1; i <argc; i++){ 
     if (lstat(argv[i], &path_stat)) { 
      perror(argv[i]); 
     } else { 

      if (S_ISDIR(path_stat.st_mode)){ 
      size=path_stat.st_blocks; 
      printf("%d %s \n",size,argv[i]); 
      } 

     } 
    } 
    return(0); 
} 
+1

为什么你认为8的输出是错误的? –

+0

我已经检查过使用多个目录并使用ls -ls来仔细检查 – user1995933

+1

ls -ls不能显示目录的大小。它甚至没有列出目录,而是列出了其中的文件。 –

的st_blocks与st_blocks是分配给该目录节点512个字节块的数量。对于典型的现代文件系统,8x512 = 4096字节= 1块看起来是正确的。

它不会告诉你文件夹内的文件或类似信息的总大小,如果这是你希望获得的。

欲了解更多信息: https://askubuntu.com/questions/186813/why-does-every-directory-have-a-size-4096-bytes-4-k