Разница между системными вызовами statvfs() и statfs()?
Решение
Эээ, "исторические причины".
Первоначально 4.4BSD определял statfs()
вызов.Позже Linux реализовал немного другой вызов с тем же именем.Posix стандартизировал его между всеми версиями Freenix и Unix, определив statvfs()
.
statfs()
зависит от ОС
statvfs()
является posix-совместимым
Поскольку все они возвращают немного разные структуры, последующие не смогут заменить первые.
В общем, вы должны использовать statvfs()
, Posix.Однако будьте осторожны с советами «использовать Posix», поскольку в некоторых случаях (например, pty) BSD (или что-то еще) на практике более переносим.
Другие советы
Если вам просто нужна информация о емкости и использовании файловой системы, другие ответы верны:предпочитать statvfs
потому что это стандарт POSIX и лучше обрабатывается файлы большого размера. statfs
специфичен для BSD и Linux и имеет разные структуры в каждом из них.(В Linux 2.6 добавлены новые statfs64
и fstatfs64
системные вызовы, которые используют расширенную структуру для обработки больших размеров.) Однако statfs
по-прежнему полезен в Linux для определения типа файловой системы. (при условии, что вы умеете писать код, специфичный для Linux).
statfs()
устарел в пользу statvfs()
, который занимается значительно лучше с поддержкой больших файлов. statfs()
известно, что он делает странные вещи для размеров, превышающих значение unsigned long.
Насколько я могу судить (и помнить), statvfs()
существует начиная с Redhat 7.3, сразу после того, как был представлен в качестве замены POSIX.Скорее всего, вы найдете его в (большинстве) современных систем.