電子書籍の厳選無料作品が豊富!

c言語でファイル操作の勉強をしています.

引数にファイル名を与えてプログラムを実行するとして,
そこからfstatでそのファイルがリンクかどうかを,
判別する方法はありますか.
また,statなら判別できますか?

パソコンはunixです.

よろしくお願いします.

A 回答 (2件)

open()にシンボリックリンクを引数として与えると普通はリンク先のファイルを開きます。

なので、シンボリックリンクの判定をするならopen()→fstat()ではなくlstat()にすべきでした。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/15 16:45

リンクというのは、シンボリックリンク、ハードリンク、それ以外のどれでしょうか?



シンボリックリンクなら、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システムコールを使用したときに,自動的にリンク先のファイルを
開いてしまうようなことはないのですか?

補足日時:2009/12/14 20:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!