递归删除文件(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