- ベストアンサー
fstatでファイルがリンクかどうか分かるか
c言語でファイル操作の勉強をしています. 引数にファイル名を与えてプログラムを実行するとして, そこからfstatでそのファイルがリンクかどうかを, 判別する方法はありますか. また,statなら判別できますか? パソコンはunixです. よろしくお願いします.
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
open()にシンボリックリンクを引数として与えると普通はリンク先のファイルを開きます。なので、シンボリックリンクの判定をするならopen()→fstat()ではなくlstat()にすべきでした。
その他の回答 (1)
- salsberry
- ベストアンサー率69% (495/711)
リンクというのは、シンボリックリンク、ハードリンク、それ以外のどれでしょうか? シンボリックリンクなら、fstat()の結果のstruct statのst_modeに対してS_ISLNK()マクロを使えば判定できます。 ハードリンクはstruct statのst_nlinkを見ればリンク数が分かります。 fstatのマニュアルページを参照のこと (man fstat)。
補足
回答有り難うございます. 説明不足ですみません.シンボリックリンクです. シンボリックリンクに対して, S_ISLNKを使ったのですが,結果は偽でした. また,S_ISREGだと,結果は真でした. 以下のようにしたのですが,どこか間違ってるでしょうか? 引数にシンボリックリンクの名前を与えプログラムを実行. ↓ 与えられた引数から,ファイル名を取得. ↓ openでファイル記述子を得る. ↓ fstatに先のファイル記述子とstruct statのアドレスを渡す. ↓ S_ISLNK()マクロをstruct statのst_modeに使う. また,疑問なのですが, openシステムコールを使用したときに,自動的にリンク先のファイルを 開いてしまうようなことはないのですか?
お礼
有り難うございました. 解決しました.