既知のファイル記述子を持つ開いているファイルがある場合、 と を使用する利点は何fstat()ですかstat()? なぜ機能が1つしかないのですか?
int fstat(int fildes, struct stat *buf)
int stat(const char *path, struct stat *buf)
既知のファイル記述子を持つ開いているファイルがある場合、 と を使用する利点は何fstat()ですかstat()? なぜ機能が1つしかないのですか?
int fstat(int fildes, struct stat *buf)
int stat(const char *path, struct stat *buf)
前述のように、はファイル記述子で動作stat()しますが、ファイル名で動作します。fstat()
そのために2つの機能があるのはなぜですか?
1つの要因は利便性であると思われます。fstat()ファイル名を渡さなくても、コードの他の部分から取得したファイル ディスクリプタにアクセスできるのは素晴らしいことです。
ただし、主な理由はセキュリティです。最初stat()にファイルを作成してからそれopen()を作成すると、その間にファイルが変更された (または権限が変更されたなど) か、シンボリック リンクに置き換えられた可能性があるわずかな時間枠があります。
fstat()その問題を回避します。最初open()にファイルを取得すると、そのファイルを足元で交換することはできなくなります。そうfstat()すれば、正しいファイルを持っていることを確認できます。
を見るとman fstat、次のことがわかります。
fstat() は、stat されるファイルがファイル記述子 fd によって指定されることを除いて、stat() と同じです。
少し拡張するfstatには、たまたまファイル パスの代わりにファイル記述子がある場合に使用します。
上記の引用からわかるように、関数によって提供される情報に関しては、それらは文字通り同一です。
ファイルへのファイル記述子しかない場合(ただし、そのパスがわからない場合があります)、fstat();を使用できます。ファイルへのパスしかない場合は、stat()最初に開く必要はなく、直接使用できます。