Как 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 .

Что «неправильно» с моим подходом? Как вычислить общее количество?

Редактировать:

Для проверки я создал папку, содержащую файлы 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 

Interesting Posts

Вставьте содержимое второго файла с помощью awk

Что происходит, когда я открываю и читаю / proc?

Каждый пользователь получает свои собственные tty (ы)?

переименуйте пакет файлов после чтения из исходного файла

Найти каталог, содержащий все файлы в моем списке

Принудительная проверка fsck после перезагрузки с помощью одной команды

Пример мониторинга ZFS с использованием mrtg

понимание "dpkg –status-fd n"

CentOS 7 – Использование systemctl для запуска виртуальной машины без головы

Как узнать, действительно ли папка является символической ссылкой и как ее исправить, если она сломана?

Удаление информации, такой как софт-ссылки из пакета RPM в Linux

Не удается запустить скрипт python при загрузке

Ограничение поддержки символов ZSH, поддерживающее повторение?

-bash: android: команда не найдена

Win 8.1 гость на VirtualBox 5 работает на Wayland 1.8 freezes после входа в систему

Linux и Unix - лучшая ОС в мире.