• ベストアンサー

fstatでファイルがリンクかどうか分かるか

c言語でファイル操作の勉強をしています. 引数にファイル名を与えてプログラムを実行するとして, そこからfstatでそのファイルがリンクかどうかを, 判別する方法はありますか. また,statなら判別できますか? パソコンはunixです. よろしくお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

open()にシンボリックリンクを引数として与えると普通はリンク先のファイルを開きます。なので、シンボリックリンクの判定をするならopen()→fstat()ではなくlstat()にすべきでした。

goopth
質問者

お礼

有り難うございました. 解決しました.

その他の回答 (1)

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

リンクというのは、シンボリックリンク、ハードリンク、それ以外のどれでしょうか? シンボリックリンクなら、fstat()の結果のstruct statのst_modeに対してS_ISLNK()マクロを使えば判定できます。 ハードリンクはstruct statのst_nlinkを見ればリンク数が分かります。 fstatのマニュアルページを参照のこと (man fstat)。

goopth
質問者

補足

回答有り難うございます. 説明不足ですみません.シンボリックリンクです. シンボリックリンクに対して, S_ISLNKを使ったのですが,結果は偽でした. また,S_ISREGだと,結果は真でした. 以下のようにしたのですが,どこか間違ってるでしょうか? 引数にシンボリックリンクの名前を与えプログラムを実行. ↓ 与えられた引数から,ファイル名を取得. ↓ openでファイル記述子を得る. ↓ fstatに先のファイル記述子とstruct statのアドレスを渡す. ↓ S_ISLNK()マクロをstruct statのst_modeに使う. また,疑問なのですが, openシステムコールを使用したときに,自動的にリンク先のファイルを 開いてしまうようなことはないのですか?

関連するQ&A