Pergunta

Por que o statfs() e statvfs() chama tanto a existir quando eles são tão semelhantes?

Em que circunstâncias eu iria preferir um sobre o outro?

Foi útil?

Solução

Err, "razões históricas".

Originalmente 4.4BSD definida uma chamada statfs(). Linux mais tarde implementada uma chamada ligeiramente diferente com o mesmo nome. Posix padronizado que entre todas as versões freenix e Unix, definindo statvfs().

statfs() é específico do OS

statvfs() é posix-conformes

Como todo o retorno que eles ligeiramente diferentes estruturas, os posteriores para vir junto não pode substituir o primeiro.

Em geral, você deve usar statvfs(), o Posix um. Tenha cuidado com o "uso Posix" conselho, porém, como em alguns casos (Pty, por exemplo), o BSD (ou qualquer outro) é mais portátil na prática.

Outras dicas

Se você quiser apenas a capacidade do sistema de arquivos e informações de uso, as outras respostas estão corretas: prefira statvfs porque é padrão arquivo grande POSIX e alças tamanhos melhor. statfs é específico Linux-BSD e, com diferentes estruturas em cada um. (Linux 2.6 adicionou novas chamadas statfs64 e do sistema fstatfs64 que usam uma estrutura expandido para lidar com tamanhos maiores.) No entanto, statfs ainda é útil em Linux para determinar o tipo de sistema de arquivos (supondo que você está bem com a escrita Linux-específicas de código).

statfs() é depreciado em favor do statvfs(), que trata consideravelmente melhor com suporte a arquivos grandes. statfs() é conhecido por fazer coisas estranhas para tamanhos que excedam o valor de um unsigned long.

Tanto quanto eu posso dizer (e lembre-se), statvfs() existe desde Redhat 7.3, apenas depois de ser apresentado como um substituto POSIX. Você provavelmente vai encontrá-lo em (a maioria) sistemas modernos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top