BSD オペレーティング システムと Linux の両方が と呼ばれる関数のファミリを提供します。これfts(3)
は POSIX と同じことを行いますが、ftw
コールバックによる制御の反転はありません。代わりに、パラダイムは、FS 階層を「開いて」ハンドルを取得し、そこからエントリを「読み取る」ことです。
char *const roots[] = {root, NULL}; // fts allows for multiple roots
FTS *hier = fts_open(roots, FTS_PHYSICAL | FTS_NOSTAT, NULL);
FTSENT *entry;
while ((entry = fts_read(hier)) != NULL) {
puts(entry->fts_path);
}
fts_close(hier);
私見ですが、これはビジター パターンよりもはるかにクリーンですが、Java コードを直接移植する場合は、もちろんそれを の上に実装できますfts(3)
。
お使いの OS に が含まれていない場合は、 OpenBSD バージョンの をfts(3)
チェックしてください。これは、わずかな変更でプログラムに貼り付けることができるはずです。header も必要です。fts.c
fts.h