gnu coreutils-4.5.1 rmdir.c 代码分析2


早上起来,再看看代码。先看env.c这个代码搞不清头绪,于是加打印语句,主要是对getopt这个函数用法不清楚,上回读sed-1.8的代码时,没有吃透getopt函数的代码。
再读mkdir.c  rm.c感觉意思有大。昨天看了rmdir.c感觉其中对-p参数的处理很有意思。
先举个例子。
在当前目录下建立一个文件夹。
mkdir -p a/b/c
如果rmdir a/b/c
只会删除c文件夹。
如果rmdir -p a/b/c
就把a  , a/b, a/b/c三个文件夹都删除了。那是如何实现的。
通过函数remove_parents (char *path)
流程是:
while(1)
{
 slash=strrchr(path,'/');
 if (slash == NULL)
  break;
 while(slash>path && *slash=='/')
  --slash;
 slash[1]=0;
 fail=rmdir(path);
}
我把核心逻辑写出来,比如,删除rmdir -p a/b/c
在main程序中,已经把a/b/c中c目录删除了,因为在linux中,目录也是一个文件。
在remove_parents中path="a/b/c"
"a/b/c"
"a/b0c"
再删除a/b目录
"a/b0c"
"a0b0c"
再删除a目录
感觉作者写得真漂亮,strrchr从右边开始查找字符,作者用库函数也是出神入化。佩服。


猜你喜欢

转载自blog.csdn.net/woshiyilitongdouzi/article/details/80490835