statfs()
とstatvfs()
呼び出しが非常に似ているのに、なぜ両方が存在するのですか?
どのような状況で私はどちらか一方を優先しますか?
エラー、「歴史的な理由」。
もともと4.4BSDはstatfs()
呼び出しを定義しました。Linuxは後で、同じ名前でわずかに異なる呼び出しを実装しました。Posixは、を定義することにより、すべてのfreenixバージョンとUnixバージョンの間で標準化しましたstatvfs()
。
statfs()
OS固有です
statvfs()
posix準拠です
それらはすべてわずかに異なる構造を返すため、後から来るものは最初のものを置き換えることはできません。
一般statvfs()
に、Posixを使用する必要があります。ただし、場合によっては(ptyなど)BSD(またはその他)の方が実際には移植性が高いため、「Posixを使用する」というアドバイスには注意してください。
ファイルシステムの容量と使用状況の情報だけが必要な場合は、他の答えが正しいです。statvfs
標準のPOSIXであり、大きなファイルサイズをより適切に処理できるためです。statfs
BSDおよびLinuxに固有であり、それぞれに異なる構造があります。(Linux 2.6では、拡張構造を使用してより大きなサイズを処理する新しいシステムコールが追加されましstatfs64
たfstatfs64
。)ただし、statfs
Linuxでは、ファイルシステムタイプを判別するのに役立ちます(Linux固有のコードを記述しても問題がない場合)。
statfs()
は非推奨になり、ラージファイルサポートをかなりstatvfs()
うまく処理できるようになりました。unsignedlongの値を超えるサイズに対して奇妙なことをすることが知られています。statfs()
私が知る限り(そして覚えstatvfs()
ている限り)、POSIXの代替品として導入された直後のRedhat7.3から存在しています。(ほとんどの)最新のシステムで見つかる可能性があります。