apue编程之参考du代码利用递归写的一个简单的du命令的源代码
2014-07-10 10:00
585 查看
#include <stdio.h> #include <stdlib.h> #include <glob.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #define PATHSIZE 1024 static int path_noloop(const char *path) { char *pos; pos = strrchr(path,'/');//定位最右边的'/'的位置 if(strcmp(pos+1,".") == 0 || (strcmp(pos+1,"..") == 0)) return 0; return 1; } static int64_t mydu(const char *path) { int i; glob_t globres; int64_t sum; static struct stat statres; static char nextpath[PATHSIZE]; if(lstat(path, &statres) < 0) { perror("lstat()"); return 0;//exit(1); } if(!S_ISDIR(statres.st_mode)) return statres.st_blocks; strncpy(nextpath, path,PATHSIZE); strncat(nextpath, "/*" , PATHSIZE); glob(nextpath,GLOB_NOSORT, NULL, &globres); strncpy(nextpath, path,PATHSIZE); strncat(nextpath, "/.*" , PATHSIZE); glob(nextpath,GLOB_NOSORT|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]); } return sum; } int main(int argc,char **argv) { if(argc < 2) { fprintf(stderr,"Usage...\n"); exit(1); } printf("%lld 512B blocks\n",mydu(argv[1])); return 0; }
相关文章推荐
- apue编程之参考du代码利用递归写的一个简单的du命令的源代码
- 参考df代码写的一个简单的df命令的源代码
- apue编程之参考df代码写的一个简单的df命令的源代码
- 转:参考df代码写的一个简单的df命令的源代码
- apue编程之参考df代码写的一个简单的df命令的源代码
- 参考df代码写的一个简单的df命令的源代码
- 利用一个简单的递归实现打印目录的层次结构
- C# 一个简单分词程序的思路和代码(六) 源代码 ,测试程序,词库下载地址
- 我也提一个关于递归的问题,代码简单,不绕,希望一起讨论一下~
- 利用git工具命令简单的从github上拷贝和上传代码
- 代码简单示意:利用log4j将一个类中不同业务日志记录到不同位置
- Asp.net 在网页编写C#代码示例-- 一个简单的web MsSql 命令执行环境
- 简单算法--一个整形数逆序输出后正序输出/一段精彩的递归代码
- 【Visual Basic】纯代码不拖控件,利用动态生成控件的方式完成一个简单的四则运算计算器
- 一个简单的递归页面控件赋值的代码!~
- 代码简单示意:利用log4j将一个类中不同业务日志记录到不同位置
- jsp_首先利用纯HTML写一个简单的登录页面以及后台处理页面【代码】
- 【iOS开发-50】利用创建新的类实现代码封装,从而不知不觉实践一个简单的MVC实验,附带个动画
- 一个网站登录,然后下载网页源代码和文件的代码
- socket_一个简单应用_源代码