Разница между системными вызовами statvfs() и statfs()?

StackOverflow https://stackoverflow.com/questions/1653163

  •  10-09-2019
  •  | 
  •  

Вопрос

Почему statfs() и statvfs() оба вызова существуют, хотя они так похожи?

При каких обстоятельствах я бы предпочел одно другому?

Это было полезно?

Решение

Эээ, "исторические причины".

Первоначально 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.Скорее всего, вы найдете его в (большинстве) современных систем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top