运行结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/454c0c824a67ce94cb4fd627b3acffcb.png)
代码
#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <glob.h>
#include <string.h>
#define PATHSIZE 1024
static int path_noloop(const char * path)
{
char *pos;
pos= strrchr(path,'/');
if(pos==NULL)
{
exit(1);
}
if(strcmp(pos+1,".")==0||strcmp(pos+1,"..")==0)
return 0;
return 1;
}
static int64_t mydu(const char *path)
{
static struct stat statres;
static char nextpath[PATHSIZE];
glob_t globres;
int i;
int64_t sum;
if(lstat(path,&statres)<0)
{
perror("lstat()");
exit(1);
}
if(!S_ISDIR(statres.st_mode))
{
return statres.st_blocks;
}
strncpy(nextpath,path,PATHSIZE);
strncat(nextpath,"/*",PATHSIZE);
glob(nextpath,0,NULL,&globres);
strncpy(nextpath,path,PATHSIZE);
strncat(nextpath,"/.*",PATHSIZE);
//追加
glob(nextpath,GLOB_APPEND,NULL,&globres);
sum=statres.st_blocks;
for(i=0;i<globres.gl_pathc;i++)
{
if(path_noloop(globres.gl_pathv[i]))
sum+=mydu(globres.gl_pathv[i]);
}
globfree(&globres);
return sum;
}
int main(int argc,char*argv[])
{
if(argc<2)
{
fprintf(stderr,"Usage....\n");
exit(1);
}
printf("%ld\n", mydu(argv[1])/2);
exit(0);
}```