10

既知のファイル記述子を持つ開いているファイルがある場合、 と を使用する利点は何fstat()ですかstat()? なぜ機能が1つしかないのですか?

int fstat(int fildes, struct stat *buf)

int stat(const char *path, struct stat *buf)
4

5 に答える 5

23

前述のように、はファイル記述子で動作stat()しますが、ファイル名で動作します。fstat()

そのために2つの機能があるのはなぜですか?

1つの要因は利便性であると思われます。fstat()ファイル名を渡さなくても、コードの他の部分から取得したファイル ディスクリプタにアクセスできるのは素晴らしいことです。

ただし、主な理由はセキュリティです。最初stat()にファイルを作成してからそれopen()を作成すると、その間にファイルが変更された (または権限が変更されたなど) か、シンボリック リンクに置き換えられた可能性があるわずかな時間枠があります。

fstat()その問題を回避します。最初open()にファイルを取得すると、そのファイルを足元で交換することはできなくなります。そうfstat()すれば、正しいファイルを持っていることを確認できます。

于 2014-04-19T11:18:07.633 に答える
0

を見るとman fstat、次のことがわかります。

fstat() は、stat されるファイルがファイル記述子 fd によって指定されることを除いて、stat() と同じです。

少し拡張するfstatには、たまたまファイル パスの代わりにファイル記述子がある場合に使用します。

上記の引用からわかるように、関数によって提供される情報に関しては、それらは文字通り同一です。

于 2014-04-19T11:13:27.063 に答える
0

ファイルへのファイル記述子しかない場合(ただし、そのパスがわからない場合があります)、fstat();を使用できます。ファイルへのパスしかない場合は、stat()最初に開く必要はなく、直接使用できます。

于 2014-04-19T11:13:43.103 に答える