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


第一部


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

c语言实现tree数据结构

该代码实现了tree的结构,依赖dyArray数据结构。有first一级目录,second二级目录。 dyArray的c实现参考这里点击打开链接  hashTable的c实现参考这里点击打开链接 下面...

算法导论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
  • 1071

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...

[leetcode]Symmetric Tree (对称树 C语言实现)

Symmetric Tree Given a binary tree, check whether it is a mirror of itself (ie, symmetric around i...

[leetcode]Validate Binary Search Tree (判断有效二叉搜索树 C语言实现)

Validate Binary Search Tree Given a binary tree, determine if it is a valid binary search tree (BS...

关于C++类库KYLib: 用C语言实现平衡二叉树(AVL tree)的源码

平衡二叉树(AVL tree)调整算法请参见我的博文: 若要在 C++ 中使用则只要将 KYAVLTreeC.c 改为 KYAVLTreeC.cpp 即可。   用C语言实现平衡二叉树(A...
  • kyee
  • kyee
  • 2011-03-05 09:28
  • 1512

Binary Search Tree C语言实现

Binary Search Tree是数据结构中比较有用的一种二叉树结构,这种结构讲大量的数据进行平摊式分布,并且规定大的数在右边,小的数在左边,以这种方式存放的数据可以非常方便地做数据排序和检索。 ...

命令ls的C语言实现

#include   2 #include   3 #include "../apuestudy/ourhdr.h"   4   5   6 int main(i...

在linux中用C语言实现ping命令的部分功能

运用C语言编写模拟常用网络命令ping命令实现一个基于linux原始套接字和ICMP协议的ping程序。该程序能用于检测主机或路由器工作是否正常。 程序中主要的函数 void alarm_hand...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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