Разница между системными вызовами statvfs () и statfs ()? - PullRequest
19 голосов
/ 31 октября 2009

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

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

Ответы [ 3 ]

18 голосов
/ 31 октября 2009

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

Изначально 4.4BSD определял вызов statfs(). Позже Linux реализовал немного другой вызов с тем же именем. Posix стандартизировал его между всеми версиями freenix и Unix, определив statvfs().

statfs() зависит от ОС

statvfs() соответствует posix

Поскольку все они возвращают слегка отличающиеся структуры, более поздние из них не могут заменить первые.

Как правило, вы должны использовать statvfs(), Posix. Будьте осторожны с рекомендациями «использовать Posix», так как в некоторых случаях (например, pty) BSD (или любой другой) более практичен.

3 голосов
/ 30 января 2013

Если вам нужна информация о емкости и использовании файловой системы, остальные ответы верны: предпочтите statvfs, потому что это стандарт POSIX и лучше обрабатывает файлы большого размера. statfs специфичен для BSD и Linux, с различными структурами на каждом. (В Linux 2.6 добавлены новые системные вызовы statfs64 и fstatfs64, которые используют расширенную структуру для обработки больших размеров.) Однако statfs все еще полезно в Linux для определения типа файловой системы (при условии, что вы все в порядке с написанием специфичного для Linux кода).

1 голос
/ 31 октября 2009

statfs() устарела в пользу statvfs(), что означает значительно лучше с поддержкой больших файлов. statfs(), как известно, делает странные вещи для размеров, которые превышают значение беззнакового long.

Насколько я могу судить (и помнить), statvfs() существует с Redhat 7.3, сразу после того, как его представили как замену POSIX. Вы, вероятно, найдете его в (большинстве) современных систем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...