Linux는 /bin/ls -l을 실행할 때 총 블록 수를 어떻게 계산합니까?

Linux는 /bin/ls -l을 실행할 때 총 블록 수를 어떻게 계산합니까?

/bin/ls -l프로그램이 디렉토리의 전체 크기(블록 수)를 어떻게 계산하는지 알아내려고 합니다 . 이는 디렉토리 내용 바로 앞에 인쇄되는 출력을 의미합니다.total number

여기에도 비슷한 질문이 있습니다.https://stackoverflow.com/questions/7401704/what-is-that-total-in-the-very-first-line-after-ls-l그러나 질문에 완전히 대답하지도 않고 계산 방법을 정확하게 설명하지도 않습니다.

나는할당된 512B 블록 수 디렉토리의 모든 (숨겨지지 않은) 파일에 대해. 내가 시도하는 방법은 다음과 같습니다(C).

 int getBlockSize(char* directory) {
   int size = 0;

   DIR *d;
   struct dirent *dir;
   struct stat fileStat;
   d = opendir(directory);
   if (d) {
       while ((dir = readdir(d)) != NULL) {
           if (dir->d_name[0] != '.') { // Ignore hidden files
               // Create the path to stat
               char info_path[PATH_MAX + 1];
               strcpy(info_path, directory);
               if (directory[strlen(directory) - 1] != '/')
                   strcat(info_path, "/");
               strcat(info_path, dir->d_name);

               stat(info_path, &fileStat);

               size += fileStat.st_blocks;
           }
       }
   }

   return size;
}

그러나 이것은 명령과 비교하여 훨씬 다른 숫자를 제공합니다 ls.

내 접근 방식에 '잘못'이 무엇입니까? ls총계는 어떻게 계산되나요 ?

편집하다:

test_file1.txt테스트하기 위해 파일이 포함된 폴더 와 test_file2.txt각각 텍스트가 포함된 폴더를 만들었습니다 Hello World!. 내가 실행하면 ls -l다음과 같은 결과가 나타납니다.

total 1
-rw-------. 1 aaa111 ugrad 13 Oct 27 13:17 test_file1.txt
-rw-------. 1 aaa111 ugrad 13 Oct 27 13:17 test_file2.txt

그러나 위의 방법을 사용하여 코드를 실행하면 다음과 같은 결과가 나타납니다.

total 2
-rw-------. 1 aaa111 ugrad 13 Oct 27 13:17 test_file1.txt
-rw-------. 1 aaa111 ugrad 13 Oct 27 13:17 test_file2.txt 

답변1

우분투에서는 기본값 ls암소 비슷한 일종의 영양ls, 어느기본값은 1024바이트 블록 크기입니다."전체" 라인에 대해 설명합니다. 이는 와 접근 방식 간의 출력 차이를 설명합니다 ls. 접근 방식은 512바이트 블록을 계산하기 때문에 블록 수가 두 배로 표시됩니다.

GNU가 512바이트 블록으로 계산되도록 하는 다양한 방법이 있습니다 ls(위 링크 참조). 가장 신뢰할 수 있는 방법은 다음과 같이 설정하는 것입니다 LS_BLOCK_SIZE.

LS_BLOCK_SIZE=512 ls -l

lsLinux에서 실행하기 쉬운 다른 구현은 다음과 같습니다.BusyBox ls; 또한 "전체" 줄에 1024바이트 블록 크기를 사용하며 다른 크기를 사용하도록 구성할 수 없습니다.

관련 정보