linux命令: tree的c实现
2015-12-09 14:02
211 查看
tree命令的c语言实现.
#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); }
相关文章推荐
- 时间都去哪儿了—兄弟连IT教育
- LINUX内核中编写procfs
- 时间如流水般逝去—兄弟连IT教育
- 时间改变一切—兄弟连IT教育
- 手把手教你写Linux I2C设备驱动2
- linux的 压缩与解压 命令集
- linux的 压缩与解压 命令集
- Linux core 文件介绍
- Linux 下编译及调试 C 代码的简易指南
- Linux Kernel(Android) 加密算法汇总(四)-应用程序调用OpenSSL加密演算法
- linux常用命令
- linux重启和关闭系统命令
- centos6.5 gsoap安装过程+ php添加soap扩展
- Linux环境PHP7.0安装
- Linux命令学习笔记(3)----less命令
- 【翻译】Android安全之Linux内核篇
- 7 linux服务器程序规范
- Linux安装MySQL-5.6.24-1.linux_glibc2.5.x86_64.rpm-bundle.tar
- Linux中的中断处理
- Linux定时任务系统 Cron