statfs()
è deprecato a favore di statvfs()
, che tratta considerevolmente meglio con il supporto di file di grandi dimensioni. statfs()
è noto per fare cose strane per le dimensioni che superano il valore di un long senza segno.
Per quanto ne so (e ricordo), statvfs()
è in circolazione da Redhat 7.3, subito dopo essere stato introdotto come sostituto di POSIX. Probabilmente lo troverai su (la maggior parte) dei sistemi moderni.
Err, "ragioni storiche".
Originariamente 4.4BSD definiva un statfs()
chiamata. Successivamente Linux ha implementato una chiamata leggermente diversa con lo stesso nome. Posix lo ha standardizzato tra tutte le versioni freenix e Unix definendo statvfs()
.
statfs()
è specifico del sistema operativo
statvfs()
è conforme a posix
Dato che restituiscono tutte strutture leggermente diverse, quelle successive non possono sostituire la prima.
In generale dovresti usare statvfs()
, quello Posix. Fai attenzione al consiglio "usa Posix", tuttavia, poiché in alcuni casi (pty, ad esempio) quello BSD (o qualsiasi altra cosa) è più portabile nella pratica.
Se desideri solo la capacità del file system e le informazioni sull'utilizzo, le altre risposte sono corrette:preferisci statvfs
perché è POSIX standard e gestisce meglio file di grandi dimensioni. statfs
è specifico per BSD e Linux, con strutture diverse su ciascuno. (Linux 2.6 ha aggiunto il nuovo statfs64
e fstatfs64
chiamate di sistema che utilizzano una struttura espansa per gestire dimensioni maggiori). Tuttavia, statfs
è ancora utile su Linux per determinare il tipo di file system (supponendo che tu stia bene con la scrittura di codice specifico per Linux).