C语言实现tree命令

原创 2016年08月30日 09:47:26

原文

#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);
}


第一部


B-tree详解及实现(C语言)

M阶的B-tree是一棵具有下列结构特性的树: (1)树的根或者是一片树叶,或者其儿子树在2到M之间。 (2)除根外,所有非树叶节点的儿子数在[M/2]到M之间。(符号[]表示向上取整) (3)...

c语言实现tree数据结构

该代码实现了tree的结构,依赖dyArray数据结构。有first一级目录,second二级目录。 dyArray的c实现参考这里点击打开链接  hashTable的c实现参考这里点击打开链接 下面...
  • hherima
  • hherima
  • 2014年08月01日 11:23
  • 2153

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Linux--tree命令实现

一个简单的实现。 参考#include #include #include #include #include #include void printdir(const char* dir...

linux下tree、命令的用法及实现代码

Linux下有这样一个命令,可以把当前目录下的所有文件和子文件以tree的方式显示出来,看下效果 [www.linuxidc.com@localhost test]$ tree  .  |-...

[shell]用shell写的tree 命令

#记录当前所在的路径 myPath="$PWD" #将会填充blank sblank=" " #blank将会填充在“└────”的前面 sblankblank="└────" #tree函数...

Java开发两种Tree实现

第一种:有父节点的树的实现 一、action代码 @RequestMapping(value="/tree_sbzl.json", method={RequestMethod.GET, Request...

AVL Tree C语言实现

#ifndef _AVLTree_H struct Avlnode; typedef struct Avlnode *Position; typedef struct Avlnode *Avltre...

[leetcode]Same Tree(判断两个二叉树是否相等 C语言实现)

Same Tree Given two binary trees, write a function to check if they are equal or not.Two binary tre...

算法导论C语言实现: 二叉搜索树(binary tree)

1. 源代码 ia_binarytree.h #ifndef __IA_BINARY_TREE_H__ #define __IA_BINARY_TREE_H__ #include typede...
  • v2nero
  • v2nero
  • 2014年01月05日 22:38
  • 1158
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言实现tree命令
举报原因:
原因补充:

(最多只允许输入30个字)