Разница между системными вызовами statvfs() и statfs ()?
3 ответов
Истерика Изюм
Err, "исторические причины".
первоначально 4.4 BSD определил 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 () делает нечетные вещи для размеров, превышающих значение беззнакового long.
насколько я могу судить (и помнить), statvfs () существует с Redhat 7.3, сразу после введения в качестве замены POSIX. Скорее всего, вы найдете его в (большинстве) современных систем.