f_bavail: 1391952
f_files: 0
f_ffree: 0
f_favail: 0
f_fsid: 0
f_flag: ST_NOSUID
f_namemax: 260
Во время написания этого, для GLIBC 2.3.2 и ранее, GNU df
не использует statvfs()
. Это потому, что код читает /etc/mtab
и вызывает stat()
для каждой смонтированной файловой системы, чтобы найти ту, номер устройства которой совпадает с соответствующим аргументом для файла (или дескриптора файла). Для того, чтобы прочесть опции монтирования, коду нужно найти файловую систему, поэтому он может установить биты f_flag
. Проблема в том, что stat()
на смонтированной удаленной файловой системе, сервер которой недоступен, может висеть неопределенно долго, вызвав также зависание df
. С тех пор эта проблема в GLIBC была исправлена, но df
не будет изменяться в течение некоторого времени, так что она сможет продолжать работать на более старых системах.
ЗАМЕЧАНИЕ. Хотя POSIX определяет statvfs()
и fstatvfs()
, не все системы их поддерживают или поддерживают корректно. Многие системы (включая Linux, как вскоре будет описано), имеют свои собственные системные вызовы, предоставляющие сходную информацию. GNU df
использует библиотечную процедуру для получения сведений о файловой системе; исходный файл для этой процедуры наполнен #ifdef
для большого числа различных систем. Со временем ситуация с переносимостью должна улучшиться.