FTW(3)

名前
ftw - ファイルツリーを歩く

書式
#include <ftw.h>

int ftw(const char *directory, int (*funcptr )(const char *file, struct stat *sb, int flag), int depth);

説明
ftw() は directory で指定されたディレクトリ以下のツリー全体を歩き巡り、ツリー中で見つかった各々 のエントリに対して funcptr を実行する。この際エントリの directory から見た相対パス名が funcptr の第一引数として与えられる。第二引数のポインタはエントリ の stat(2) 構造体へのポインタである。第三引数の int は以下のどれかとなる。
    FTW_F	Item は通常のファイルである
    FTW_D	Item はディレクトリである
    FTW_NS	Item に対する stat が失敗した
    FTW_DNR	Item は読み込み不可なディレクトリである
注意: ディレクトリ以外のもの (symbolic link など) にはすべて FTW_F タグが設定される。

ftw() は、自分自身を再帰的に呼び出してディレクトリ下を探索する。一つのプログラムで 利用可能なファイルディスクリプター (file descriptor) を使い尽くすのを 避けるために、 depth によって同時にオープンするディレクトリの数を制限することができる。探 索の深さがこの値を越えると、 ftw() は一つのディレクトリを閉じてから他のディレクトリをオープンするようにな るので、動作が遅くなる。

ツリーの探索を止めたい場合には、funcptr が 0 以外の値を返せば良 い (この値は ftw() 自身の戻り値となる)。それ以外の場合は ftw() はツリー全体の探索を続け、すべてのツリーを探索し終えたとこ ろで 0 を返す。動作中に malloc(3) などでエラーになったら -1 を返す。

ftw() は動的なデータ構造を用いるので、ツリー探索を安全に中断する唯一の方法は 0 以外の値を funcptr の戻り値とすることである。割り込みを扱うに は、例えば起こった割り込みをマークしておいて、 0 以外の値を返すように する。—プログラムを終了させるのでなければ longjmp(3) を使ってはならない。

準拠
AES, SVID2, SVID3, XPG2, XPG3, XPG4

関連項目
stat(2)