int ftw(const char *dir, int (*fn)(const char *file, const struct stat *sb, int flag), int depth)有趣的是 一個function就可以走訪整個目錄。那對於每一個目錄中的item 要怎麼處置呢?
用call back function :
int (*fn)(const char *file, const struct stat *sb, int flag)walk through每一個item,都會呼叫這個function一次。
同時會傳入一些argument:
- const char *file : item name (目錄or file name)
- const struct stat *sb : item (目錄 or file)的stat varieble
- int flag : item 的種類
FTW_F : 檔案
FTW_D : 目錄
FTW_DNR : 不可讀取的目錄,(將不會進入)
FTW_SL : 符號連結
FTW_NS : 沒辦法取得stat 結構
當callback return 1時,ftw會停止walk through,返回。
(都搜尋完了也會返回)。
呼叫ftw時,第三個參數 depth是"容許使用的file handle"。
因為walk through的recursive動作需要動態alloca handle,這個argument限制alloc的最大handle數。
#include <sys/stat.h>.
#include <unistd.h>
#include <ftw.h>
int getfile(const char *file, const struct stat *sb, int flag)
{
static i=0;
printf("[%d] %s",i++,file);
if ( flag == FTW_D)
printf("-- directory\n");
else
printf("\n");
return 0;
}
main()
{
ftw("/home/checko", getfile,500):
}
沒有留言:
張貼留言