遞迴刪除檔案(nftw 不是執行緒安全的)

#define _XOPEN_SOURCE 500
#include <stdlib.h>  /* for exit() */
#include <stdio.h>   /* for remove() */
#include <ftw.h>     /* for nftw() */

int unlink_cb(
    const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
{
    return remove(fpath);
}

int rm_rf(const char *path)
{
    return nftw(path,
                unlink_cb,
                64 /* number of simultaneously opened fds, up to OPEN_MAX */,
                FTW_DEPTH | FTW_PHYS);
}

FTW_PHYS flag 表示不遵循符號連結

FTW_DEPTH 標誌執行後序遍歷,即在處理目錄及其子目錄的內容後,為目錄本身呼叫 unlink_cb()

如果回撥函式返回非零值,nftw 將被中斷。

注意:此方法不是執行緒安全的,因為 nftw 使用 chdir