readdir() とシンボリックリンク

 ClockRadio で音楽ファイルの検索を、readdir() を使って dirent で行っていました。ところが、dirent 構造体では、シンボリックリンクは、リンク先の情報ではなく、リンク自体の情報しか得られません。

 何が問題かというと、リンク先がディレクトリなのか、ファイルなのか区別できないということです。dirent 構造体の中に d_type というメンバ変数があるのですが、これだけでは判別できません。

 シンボリックリンクにも対応するため、ファイルとディレクトリの区別は、stat() を使うことにしました。stat() は、対象がシンボリックリンクの場合、リンク先の情報を取得します。シンボリックリンク自体の情報を取得する場合は、lstat() を使います。

 dirent 構造体にファイル種別があるのでそれを使っていましたが、シンボリックリンクに対応するには、手間がかかりますが、stat() を呼び出して、一つ一つ調べる必要があるようです。

プログラミング

Posted by sirius