【C】——实现tree命令

  在大部分的linux系统中有一个很好用的命令——tree,就是显示目录的结构,但是发现在FreeBSD中没有这个命令,因此自己实现了一个简单的tree。代码如下:主要利用了递归的思想。

 1 #include <stdio.h>
 2 #include <sys/types.h>
 3 #include <dirent.h>
 4 #include <string.h>
 5 
 6 void show_tree(char *path, int deep) {
 7     DIR *dirp = NULL;
 8     struct dirent *dp = NULL;
 9     int index = deep;
10     char *tmp_path = path;
11 
12     tmp_path = path + strlen(path);
13     *tmp_path++ = '/';
14     *tmp_path = 0;
15 
16     dirp = opendir(path);
17     if (dirp == NULL){
18         printf("can't open dir %s\n", path);
19         return ;
20     }   
21     while ((dp = readdir(dirp)) != NULL){
22         if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, "..")){
23             continue;   
24         }   
25         while(index--) {
26             printf("|  ");
27         }   
28         printf("|--%s\n", dp->d_name);
29         index = deep;
30         strcpy(tmp_path, dp->d_name);
31         if (dp->d_type == 4)
32             show_tree(path, deep + 1); 
33     }   
34     closedir(dirp);
35 }
36 
37 int main(int argc, char *argv[]) {
38     char path[1024] = ".";
39     int deep = 0;
40 
41     if (argc == 2) {
42         sprintf(path, "%s", argv[1]);
43     }   
44 
45     show_tree(path, deep);
46     return 0;
47 }

 

posted @ 2016-02-26 13:33  net小伙  阅读(2950)  评论(0编辑  收藏  举报