Я не думаю, что ваш проект действительно решаем на уровне API stat(2)
.Рассмотрим случай файла длиной 4096 байт.Предположим, что он был создан путем многократного добавления 512-байтовых блоков снова и снова.Предположим, что файловая система была полностью заполнена, за исключением одного 512-байтового блока, для каждой записи.Предположим, что 512-байтовый блок, доступный для каждой записи, был расположен в произвольно доступном месте на диске.
Этот файл фрагментирован на 100% - нет двух блоков рядом друг с другом.
Итем не менее, показатель, основанный исключительно на переменных stat(2)
, вполне может показать, что в файле нет ни одного потраченного впустую блока.
При попытке отследить ответ на ваш реальный вопрос я дошел до ext3_write_begin()
перед тем, как отозвать - надеюсь, что это полезная отправная точка для вашего поиска.
Обновление
Если вы заинтересованы в поиске фрагментации, я думаю, чтоместо для начала - команда bmap
из программы debugfs(8)
:
debugfs: bmap sars_first_radio_show.zip 0
94441752
debugfs: bmap sars_first_radio_show.zip 1
94441781
debugfs: bmap sars_first_radio_show.zip 2
94441782
debugfs: bmap sars_first_radio_show.zip 3
94441783
debugfs: bmap sars_first_radio_show.zip 4
94441784
debugfs: bmap sars_first_radio_show.zip 5
94459905
debugfs: bmap sars_first_radio_show.zip 6
95126019
debugfs: bmap sars_first_radio_show.zip 7
95126020
debugfs: bmap sars_first_radio_show.zip 8
95126021
debugfs: bmap sars_first_radio_show.zip 9
95126022
debugfs:
Здесь показаны первые десять блоков для файла sars_first_radio_show.zip
;Вы можете видеть, что блоки не все смежные: 944417 {52,81,82,83,84}, 94459905, 951260 {19,20,21,22}.
Вы можете написать сценарий ответаоколо debugfs(8)
или вы можете использовать библиотечные процедуры libext2fs
самостоятельно.Это был бы значительный шаг по сложности по сравнению с stat(2)
упражнениями, которые вы проходили - но ответы означали бы что-то , а не были бы просто смутным предположением.