ftw遍歷目錄樹 && getcwd取得當前的工作目錄

ftw遍歷目錄樹

表頭文件:#include
定義函數:int  ftw(const char *dir, int (*fn) (const *file, const struct stat *sb, int flag), int depth)
函數說明:ftw() 會從參數dir指定的 目錄開始,往下一層層地遞歸式遍歷子 目錄。ftw()會傳三個參數給fn(), 第一個參數*file指向當時所在的 目錄路徑,第二個參數是*sb, 爲stat結構指針,第三個參數爲旗標,有下面幾種可能值:
FTW_F        一般文件
FTW_D       目錄
FTW_DNR    不可讀取的 目錄,此 目錄以下將不被遍歷
FTW_SL       符號連接
FTW_NS       無法取得stat結構數據,有可能是 權限問題
最後一個參數depth代表ftw()在進行遍歷 目錄時同時打開的文件數。ftw()在遍歷時每一層 目錄至少需要一個文件描述詞,如果遍歷時用完了depth所給予的限制數目,整個遍歷將因不斷地關文件和開文件操作而顯得緩慢.
如果要結束ftw()的遍歷,fn()只需返回一非零值即可,此值同時也會是ftw()的返回值。否則ftw()會試着走完所有的 目錄,然後返回0.
返回值:遍歷中斷則返回fn()函數的返回值,全部遍歷則返回0,若有錯誤發生則返回-1.
附加說明:由於ftw()會動態配置 內存使用,請使用正常方式(fn函數返回非零值)來中斷遍歷,不要在fn函數中使用longjmp().
示例:
/*列出/etc/X11 目錄下的子 目錄*/
#include
#include
#include
int  fn(const  char *file, const struct stat *sb, int flag)
{
     if(flag == FTW_D)  
         printf("%s --- directory/n", file);
     else
         printf("%s /n",file);  
     return 0;
}
int main()
{
   ftw("/etc/X11",fn,500);
}

getcwd取得當前的工作目錄

表頭文件:#include
定義函數:char *getcwd(char *buf, size_t size)
函數說明:getcwd()會將當前的工作 目錄絕對路徑複製到參數buf所指的 內存 空間,參數size爲buf的 空間大小。在調用此函數時,buf所指的 內存 空間要足夠大,工作 目錄絕對路徑的字符串長度超過參數size大小,則返回NULL,errno的值則爲ERANGE。倘若參數buf爲NULL, getcwd()會依參數size的大小自動配置 內存(使用malloc()),如果參數size也爲0,則getcwd()會依工作 目錄絕對路徑的字符串長度來決定所配置的 內存大小,進程可以在使用完此字符串後利用free()來釋放此 空間.
返回值:執行成功則將結果複製到參數buf所指的 內存 空間,或是返回自動配置的字符串指針。失敗返回NULL,錯誤代碼存於errno.
#include
int main()
{
    char  buf[80];
    getcwd(buf, sizeof(buf));
    printf("current working directory : %s/n ",buf);
    return  0;
}

原文地址 http://www.cnscn.org

發佈了37 篇原創文章 · 獲贊 4 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章