C语言实现tree命令
2016-08-30 09:47
232 查看
原文
第一部
#include<stdio.h> #include<dirent.h> #include<sys/stat.h> #include<sys/types.h> #include<string.h> #define MAXNAME 200 void s_printf(char *filename,int depth); void s_dirwalk(char *dirname,int depth,void (*fcn)(char *,int)); void listdirtree(char *dirname,int depth); int main(int argc,char **argv) { if(argc == 1) listdirtree(".",0); else { printf("%s\n",argv[1]); listdirtree(*++argv,0); } return 0; } void listdirtree(char *dirname,int depth) { struct stat stbuf; if((stat(dirname,&stbuf)) == -1) { fprintf(stderr,"listdirtree:can't read file %s information!\n",dirname); return; } if((stbuf.st_mode & S_IFMT) == S_IFDIR) s_dirwalk(dirname,depth,listdirtree); } void s_dirwalk(char *dirname,int depth,void (*fcn)(char *,int)) { char name[MAXNAME]; struct dirent *fip; DIR *dp; if((dp = opendir(dirname)) == NULL) { fprintf(stderr,"s_dirwalk:can't open %s\n",dirname); return; } while((fip = readdir(dp)) != NULL) { if(strcmp(fip->d_name,".") == 0 || strcmp(fip->d_name,"..") == 0)/*skip directory '.' and '..'*/ continue; if(strlen(dirname) + strlen(fip->d_name) + 2 > sizeof(name)) { fprintf(stderr,"s_dirwalk:%s/%s is too long!\n",dirname,fip->d_name); return; } else { s_printf(fip->d_name,depth); sprintf(name,"%s/%s",dirname,fip->d_name); (*fcn)(name,depth + 1); } } closedir(dp); } void s_printf(char *filename,int depth) { while(depth-- > 0) printf("| "); printf("|--"); printf("%s\n",filename); }
第一部
相关文章推荐
- 5-26 Windows消息队列 (25分)
- 浅谈C语言之字符串处理函数
- c++编程之命名空间
- 5-25 朋友圈 (25分)
- llvm初步涉猎
- C++引用的实质
- atoi和strcpy的C语言实现
- C++开源代码项目汇总
- C++结束进程 并能显示其父进程
- C++错题(8-30)
- C/C++,java开源数学计算库
- cmdline —— 轻量级的C++命令行解析库
- c++:改造cmdline用于MSVC下的命令行参数解析
- [置顶] C++编程经验分享
- C、C++中使用const提高程序的健壮性和效率
- c++用双向链表实现模板栈
- c语言:计算分数精确值(%、/真是十分有用的符号,化整为零,化零为整,倒叙,单取数字都可用它们~ )
- vs调用rsa密钥退出的解决办法
- UVa1025/UVa437/UVa1347
- c语言:分解质因数