21

statfs()statvfs()呼び出しが非常に似ているのに、なぜ両方が存在するのですか?

どのような状況で私はどちらか一方を優先しますか?

4

3 に答える 3

19

エラー、「歴史的な理由」。

もともと4.4BSDはstatfs()呼び出しを定義しました。Linuxは後で、同じ名前でわずかに異なる呼び出しを実装しました。Posixは、を定義することにより、すべてのfreenixバージョンとUnixバージョンの間で標準化しましたstatvfs()

statfs()OS固有です

statvfs()posix準拠です

それらはすべてわずかに異なる構造を返すため、後から来るものは最初のものを置き換えることはできません。

一般statvfs()に、Posixを使用する必要があります。ただし、場合によっては(ptyなど)BSD(またはその他)の方が実際には移植性が高いため、「Posixを使用する」というアドバイスには注意してください。

于 2009-10-31T02:05:13.850 に答える
5

ファイルシステムの容量と使用状況の情報だけが必要な場合は、他の答えが正しいです。statvfs標準のPOSIXであり、大きなファイルサイズをより適切に処理できるためです。statfsBSDおよびLinuxに固有であり、それぞれに異なる構造があります。(Linux 2.6では、拡張構造を使用してより大きなサイズを処理する新しいシステムコールが追加されましstatfs64fstatfs64。)ただし、statfsLinuxでは、ファイルシステムタイプを判別するのに役立ちます(Linux固有のコードを記述しても問題がない場合)。

于 2013-01-30T19:08:13.813 に答える
1

statfs()は非推奨になり、ラージファイルサポートをかなりstatvfs()うまく処理できるようになりました。unsignedlongの値を超えるサイズに対して奇妙なことをすることが知られています。statfs()

私が知る限り(そして覚えstatvfs()ている限り)、POSIXの代替品として導入された直後のRedhat7.3から存在しています。(ほとんどの)最新のシステムで見つかる可能性があります。

于 2009-10-31T02:08:00.240 に答える