Domanda

Perché il statfs() e statvfs() chiama sia esistere quando sono così simili?

In quali circostanze dovrei preferire l'uno sopra l'altro?

È stato utile?

Soluzione

Err, "ragioni storiche".

In origine 4.4BSD definito una chiamata statfs(). Linux in seguito implementato una chiamata leggermente diverso con lo stesso nome. Posix standardizzato fra tutte le versioni FREENIX e Unix definendo statvfs().

statfs() è OS-specifica

statvfs() è POSIX-conforme

Mentre tutti ritornano strutture leggermente differenti, quelle successive a venire insieme non può sostituire il primo.

In generale si consiglia di utilizzare statvfs(), il Posix uno. Fate attenzione a consiglio "usare Posix", anche se, come in alcuni casi (PTY, ad esempio) la BSD (o altro) si è più portabile in pratica.

Altri suggerimenti

Se si desidera solo la capacità di file di sistema e le informazioni di utilizzo, le altre risposte sono corrette: preferiscono statvfs perché è standard POSIX e gestisce file di grandi dimensioni meglio. statfs è BSD e Linux-specifiche, con diverse strutture su ciascuno. (Linux 2.6 aggiunge nuove chiamate statfs64 e di sistema fstatfs64 che utilizzano una struttura ampliata per gestire i formati più grandi.) Tuttavia, statfs è ancora utile su Linux per determinare il tipo di file system (supponendo che stai bene con la scrittura specifico per Linux il codice).

statfs() è deprecato in favore di statvfs(), che si occupa molto meglio con il supporto di file di grandi dimensioni. statfs() è noto per fare cose strane per le dimensioni che superano il valore di un unsigned long.

Per quanto posso dire (e ricordare), statvfs() è stato intorno dal Redhat 7.3, poco dopo essere stato introdotto in sostituzione POSIX. È probabile trovare su (la maggior parte) dei sistemi moderni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top