nftw
函数(更高级的编程方式)
nftw
函数(nftw
是“new file tree walk”的缩写)提供了一种更灵活和可控的方式来遍历文件系统树并执行相应操作,包括删除非空目录。- 以下是一个简单的使用
nftw
函数来删除非空目录的C语言示例:
#include <stdio.h>
#include <stdlib.h>
#include <ftw.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int remove_callback(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
{
int rv = remove(fpath);
if (rv)
perror(fpath);
return rv;
}
int main(int argc, char *argv[])
{
if (argc!= 2)
{
fprintf(stderr, "用法: %s <目录路径>\n", argv[0]);
return 1;
}
int flags = 0;
int rv = nftw(argv[1], remove_callback, 20, flags);
if (rv)
{
perror("nftw");
return 1;
}
return 0;
}
- 在这个示例中:
nftw
函数会遍历以argv[1]
为路径的目录树。remove_callback
是一个回调函数,nftw
函数在遍历每个文件或目录时会调用这个回调函数。- 在
remove_callback
函数中,调用remove
函数来删除文件或目录。remove
函数可以用于删除文件或者空目录,当nftw
遍历到非空目录时,remove_callback
会尝试删除目录中的所有文件和子目录,然后再删除目录本身。 - 如果
nftw
函数返回非0值,表示在遍历过程中出现错误;返回0表示成功删除目录及其内容。