ftw遍历目录树
表頭文件:#include <ftw.h>
定義函數(shù):int??ftw(const char *dir, int (*fn) (const *file, const struct stat *sb, int flag), int depth)
函數(shù)說明:ftw() 會從參數(shù)dir指定的 目錄開始,往下一層層地遞歸式遍歷子 目錄。ftw()會傳三個參數(shù)給fn(), 第一個參數(shù)*file指向當時所在的 目錄路徑,第二個參數(shù)是*sb, 為stat結(jié)構(gòu)指針,第三個參數(shù)為旗標,有下面幾種可能值:
FTW_F? ?? ???一般文件
FTW_D? ?? ? 目錄
FTW_DNR? ? 不可讀取的 目錄,此 目錄以下將不被遍歷
FTW_SL? ?? ? 符號連接
FTW_NS? ?? ? 無法取得stat結(jié)構(gòu)數(shù)據(jù),有可能是 權(quán)限問題
最后一個參數(shù)depth代表ftw()在進行遍歷 目錄時同時打開的文件數(shù)。ftw()在遍歷時每一層 目錄至少需要一個文件描述詞,如果遍歷時用完了depth所給予的限制數(shù)目,整個遍歷將因不斷地關(guān)文件和開文件操作而顯得緩慢.
如果要結(jié)束ftw()的遍歷,fn()只需返回一非零值即可,此值同時也會是ftw()的返回值。否則ftw()會試著走完所有的 目錄,然后返回0.
返回值:遍歷中斷則返回fn()函數(shù)的返回值,全部遍歷則返回0,若有錯誤發(fā)生則返回-1.
附加說明:由于ftw()會動態(tài)配置 內(nèi)存使用,請使用正常方式(fn函數(shù)返回非零值)來中斷遍歷,不要在fn函數(shù)中使用longjmp().
示例:
#include <sys/stat.h> #include <unistd.h> #include <ftw.h> #include <stdio.h>int fn(const char *file, const struct stat *sb, int flag) {if(flag == FTW_D) // 如果對象是目錄printf("Directory:\t%s\n", file);//else// printf("File:\t\t%s\n", file);return 0; }int main() {ftw("/home/zcm/program/eclipse", fn, 5000);return 0; }
定義函數(shù):int??ftw(const char *dir, int (*fn) (const *file, const struct stat *sb, int flag), int depth)
函數(shù)說明:ftw() 會從參數(shù)dir指定的 目錄開始,往下一層層地遞歸式遍歷子 目錄。ftw()會傳三個參數(shù)給fn(), 第一個參數(shù)*file指向當時所在的 目錄路徑,第二個參數(shù)是*sb, 為stat結(jié)構(gòu)指針,第三個參數(shù)為旗標,有下面幾種可能值:
FTW_F? ?? ???一般文件
FTW_D? ?? ? 目錄
FTW_DNR? ? 不可讀取的 目錄,此 目錄以下將不被遍歷
FTW_SL? ?? ? 符號連接
FTW_NS? ?? ? 無法取得stat結(jié)構(gòu)數(shù)據(jù),有可能是 權(quán)限問題
最后一個參數(shù)depth代表ftw()在進行遍歷 目錄時同時打開的文件數(shù)。ftw()在遍歷時每一層 目錄至少需要一個文件描述詞,如果遍歷時用完了depth所給予的限制數(shù)目,整個遍歷將因不斷地關(guān)文件和開文件操作而顯得緩慢.
如果要結(jié)束ftw()的遍歷,fn()只需返回一非零值即可,此值同時也會是ftw()的返回值。否則ftw()會試著走完所有的 目錄,然后返回0.
返回值:遍歷中斷則返回fn()函數(shù)的返回值,全部遍歷則返回0,若有錯誤發(fā)生則返回-1.
附加說明:由于ftw()會動態(tài)配置 內(nèi)存使用,請使用正常方式(fn函數(shù)返回非零值)來中斷遍歷,不要在fn函數(shù)中使用longjmp().
示例:
#include <sys/stat.h> #include <unistd.h> #include <ftw.h> #include <stdio.h>int fn(const char *file, const struct stat *sb, int flag) {if(flag == FTW_D) // 如果對象是目錄printf("Directory:\t%s\n", file);//else// printf("File:\t\t%s\n", file);return 0; }int main() {ftw("/home/zcm/program/eclipse", fn, 5000);return 0; }
總結(jié)
- 上一篇: goaccess_nginx日志分析工具
- 下一篇: 爬虫教程( 1 ) --- 初级、基础、