在linux上删除非空目录会有如下提示:

rmdir: “目录名”: 目录非空

由于已经习惯了长期使用rmdir命令,经常在删除某些目录时就手快不自觉打出这个命令,但是如果要删除的目录里跟了很多子目录,子目录里又有很多文件, 这个命令就不好使了,就会蹦一个目录非空的提示,linux系统下为了提高给开发人员效率,提供了这样的一个命令以供使用,

rm -rf 目录名

成功删除 这样就方便了很多,节省了很多时间,但是相应的我就想到了之前在做标准C和unix平台的系统调用都没有这样的一个函数可以用来删除非空的目录,其实这也是很多初学unix开发人员遇到的挺麻烦的问题,很多人会想到ftw

NAME
     ftw, nftw - file tree walk
SYNOPSIS
     #include <ftw.h>
     int ftw(const char *dir, int (*fn)(const char *file, const struct stat *sb, int flag), int nopenfd);
     int nftw(const char *dir, int (*fn)(const char *file, const struct stat *sb, int flag, struct FTW*s), int nopenfd, int flags);

ftw只是遍历目录树而已吧,方向是从外层到里层的,而删除非空目录是要从里层到外层的。大部分代码还是要自己写。
所以要解决问题我觉得最好的办法还是用辅助栈
大概思路是这样吧:
遍历子目录,如果遇见非目录,就直接remove, 如果是目录,则放入栈中,然后继续搜索。 当最里层的目录为空时,退栈,逐个删除空目录。

rmdir ()
{
     opendir();
         while (readdir()) {
             if (!dir)
                 rm;
         else {
                 rmdir();
                 rm;
 }
 }
     closedir();
}

我们再来看比较高级点的linux系统的这个命令

rm -rf 目录名

后面的-rf 表示的其实就是r为递归的删除子目录 f为强制执行。


0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注