1 .\" Copyright (c) 1993 Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de)
2 .\" and copyright (c) 1999 Andries Brouwer (aeb@cwi.nl)
3 .\" and copyright (c) 2006 Justin Pryzby <justinpryzby@users.sf.net>
4 .\" and copyright (c) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
6 .\" This is free documentation; you can redistribute it and/or
7 .\" modify it under the terms of the GNU General Public License as
8 .\" published by the Free Software Foundation; either version 2 of
9 .\" the License, or (at your option) any later version.
11 .\" The GNU General Public License's references to "object code"
12 .\" and "executables" are to be interpreted as the output of any
13 .\" document formatting or typesetting system, including
14 .\" intermediate and printed output.
16 .\" This manual is distributed in the hope that it will be useful,
17 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
18 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 .\" GNU General Public License for more details.
21 .\" You should have received a copy of the GNU General Public
22 .\" License along with this manual; if not, write to the Free
23 .\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
26 .\" Modified Sun Jul 25 11:02:22 1993 by Rik Faith (faith@cs.unc.edu)
27 .\" 2006-05-24, Justin Pryzby <justinpryzby@users.sf.net>
28 .\" document FTW_ACTIONRETVAL; include .SH "RETURN VALUE";
29 .\" 2006-05-24, Justin Pryzby <justinpryzby@users.sf.net> and
30 .\" Michael Kerrisk <mtk.manpages@gmail.com>
31 .\" reorganized and rewrote much of the page
32 .\" 2006-05-24, Michael Kerrisk <mtk.manpages@gmail.com>
33 .\" Added an example program.
35 .\" Japanese Version Copyright (c) 1998 NAKANO Takeo all rights reserved.
36 .\" Translated 1998-04-28, NAKANO Takeo <nakano@apm.seikei.ac.jp>
37 .\" Updated & Modified 1999-09-14, NAKANO Takeo <nakano@apm.seikei.ac.jp>
38 .\" Updated & Modified 2005-11-04, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
39 .\" Updated 2006-07-26, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.36
41 .\" WORD: file descriptor ファイルディスクリプター
43 .TH FTW 3 2010-09-20 "Linux" "Linux Programmer's Manual"
45 ftw, nftw \- ファイルツリーを歩きまわる
50 .BI "int ftw(const char *" dirpath ,
51 .BI " int (*" fn ") (const char *" fpath ", const struct stat *" sb ,
52 .BI " int " typeflag ),
53 .BI " int " nopenfd );
55 .BR "#define _XOPEN_SOURCE 500" " /* feature_test_macros(7) 参照 */"
56 .B #define _XOPEN_SOURCE 500
59 .BI "int nftw(const char *" dirpath ,
60 .BI " int (*" fn ") (const char *" fpath ", const struct stat *" sb ,
61 .BI " int " typeflag ", struct FTW *" ftwbuf ),
62 .BI " int " nopenfd ", int " flags );
68 で指定されたディレクトリ以下のディレクトリツリー全体を歩きまわり、
72 デフォルトでは、ディレクトリそのものが、そのディレクトリにあるファイルや
73 サブディレクトリよりも先に処理される (行きがけ順探索; preorder traversal)。
75 呼び出し元プロセスが利用可能なファイルディスクリプタを使い切って
82 一つのディレクトリを閉じてから他のディレクトリをオープンし直すこと
87 は、ディレクトリツリーの階層 1 レベルにつき、
88 最大でも一つのファイルディスクリプタしか使用しない。
90 ディレクトリツリーで見つかったエントリ毎に、
106 が呼び出された時点の呼び出し元プロセスのカレントワーキングディレクトリ
151 に渡されるかは未定義であると、POSIX.1-2001 には書かれている。
161 はツリー全体の探索を続け、すべてのツリーを探索し終えたところで
164 の失敗などの) エラーが起こると \-1 を返す。
167 は動的なデータ構造を用いるので、ツリー探索を安全に中断する唯一の方法は
170 の返り値とすることである。割り込みを扱うには、
171 例えば発生した割り込みをマークしておいて、 0 以外の値を返すようにする
172 シグナルによりメモリリークを起こさずに探索を終了できるようにするには、
175 がチェックするグローバルなフラグをセットするようにすればよい。
194 引き数は下記のフラグの 0 個以上の論理和を取ったものである:
196 .BR FTW_ACTIONRETVAL " (glibc 2.3.3 以降)"
204 は以下の値のいずれか一つを返す必要がある。
213 がこの値を返した場合、処理中のエントリの兄弟 (同じ階層のエントリ)
214 の処理はスキップされ、親ディレクトリで続きの処理が行われる。
215 .\" If \fBFTW_DEPTH\fP
216 .\" is set, the entry's parent directory is processed next (with
217 .\" \fIflag\fP set to \fBFTW_DP\fP).
227 の引き数として渡されたディレクトリ内のエントリの処理が行われなくなる。
229 は処理中のディレクトリの兄弟 (同じ階層のエントリ) から処理を続ける。
237 他の返り値は将来新しい動作に対応付けられる可能性がある。
239 は上記のリストにある値以外を返さないようにすべきである。
245 (「どの」ヘッダファイルをインクルードするよりも前に)
252 セットされると、ディレクトリの内容を処理する前に
257 が属すディレクトリで何らかの動作を実行する必要がある場合に
261 セットされると、帰りがけ順探索 (post-order traversal) を行う。
262 つまり、ディレクトリそのものを引き数とした
264 呼出しは、そのディレクトリに含まれるファイルとサブディレクトリに
266 (デフォルトでは、ディレクトリ自身の処理はディレクトリ内のエントリ
270 セットされると、同じファイルシステムの中だけを探索対象とする
271 (つまり、マウントポイントをまたぐことはない)。
274 セットされると、シンボリックリンクを辿らない (おそらくこちらが
275 通常望ましい動作だろう)。セットされていないとシンボリックリンクを
276 辿るが、同じファイルが二回報告されることはない。
281 がセットされると、自分自身に対するシンボリックリンクを配下に持つ
300 で取り得る値のいずれか、または以下の値のいずれかが渡される:
310 配下のファイルとサブディレクトリは全て処理が終わっている。
314 がシンボリックリンクで、かつ \fBFTW_PHYS\fP が \fIflags\fP に
316 .\" To obtain the definition of this constant from
320 .\" must be defined, or
321 .\" .BR _XOPEN_SOURCE
322 .\" must be defined with a value of 500 or more.
326 がシンボリックリンクで、存在しないファイルを指している
348 は、ファイル名 (basename 要素) の、
350 で渡されるパス名の中でのオフセットである。
354 の深さを示す。深さはディレクトリツリーのトップ (root) からの
359 これらの関数は、成功すると 0 を、エラーが発生すると \-1 を返す。
362 が 0 以外を返した場合、ディレクトリツリーの探索を終了し、
373 フラグ付きで呼ばれた場合、ツリーの探索を終了させるために
382 POSIX.1-2001, SVr4, SUSv1.
387 POSIX.1-2001 の注記によると、
389 がカレントワーキングディレクトリを保持しなかった場合の
403 存在しないファイルを指しているシンボリックリンクの場合にのみ
414 Linux では、 libc4, libc5, glibc 2.0.6 は
415 「stat できるがディレクトリではないオブジェクト」
416 (ファイル, シンボリックリンク, fifo 等)
422 関数は glibc 2.1 以降で利用できる。
427 以下のプログラムは、一つ目のコマンドライン引き数を名前に持つパス以下の
428 ディレクトリツリーを探索する。引き数が指定されなかった場合は、
430 各々のファイルについて様々の情報が表示される。
431 二番目のコマンドライン引き数に文字を指定することで、
438 #define _XOPEN_SOURCE 500
446 display_info(const char *fpath, const struct stat *sb,
447 int tflag, struct FTW *ftwbuf)
449 printf("%\-3s %2d %7jd %\-40s %d %s\\n",
450 (tflag == FTW_D) ? "d" : (tflag == FTW_DNR) ? "dnr" :
451 (tflag == FTW_DP) ? "dp" : (tflag == FTW_F) ? "f" :
452 (tflag == FTW_NS) ? "ns" : (tflag == FTW_SL) ? "sl" :
453 (tflag == FTW_SLN) ? "sln" : "???",
454 ftwbuf\->level, (intmax_t) sb\->st_size,
455 fpath, ftwbuf\->base, fpath + ftwbuf\->base);
456 return 0; /* To tell nftw() to continue */
460 main(int argc, char *argv[])
464 if (argc > 2 && strchr(argv[2], \(aqd\(aq) != NULL)
466 if (argc > 2 && strchr(argv[2], \(aqp\(aq) != NULL)
469 if (nftw((argc < 2) ? "." : argv[1], display_info, 20, flags)