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