编程实现LINUX下目录的层层遍历

/*************************************************************************
  > File Name: treedir.c
  > Author: KrisChou
  > Mail:[email protected]
  > Created Time: Tue 19 Aug 2014 05:04:50 PM CST
 ************************************************************************/

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>

void print_tree(char* dirname, int spc_cnt);

int main(int argc, char* argv[])// ./main dir
{
    if(argc == 1)
    {
        print_tree(".", 0);
    }else if(argc == 2)
    {
        print_tree(argv[1], 0);
    }
    return 0 ;
}

void print_tree(char* dirname, int spc_cnt)
{
    DIR* pdir ;                       //目录指针
    struct dirent* pent ;             //可以获取目录下子项d_name的结构体指针
    struct stat my_stat ;             //根据绝对路径,获取文件信息的结构体           

    char old_path[128]="";            //保存原来的工作路径
    getcwd(old_path, 128);            

    pdir = opendir(dirname);          //打开目录
    if(pdir == NULL)
    {
        perror("opendir");
        exit(1);
    }

    chdir(dirname);                   //切换到需要遍历的目录

    while((pent = readdir(pdir)) != NULL)
    {
        if(strncmp(pent ->d_name, ".", 1) == 0 || strncmp(pent->d_name,"..", 2) == 0)
        {
            continue ;
        }

        memset(&my_stat, 0 , sizeof(my_stat));
        if(stat(pent ->d_name, &my_stat) == -1)
        {
            perror("stat");
            exit(1);
        }

        if(S_ISDIR(my_stat.st_mode))
        {
            printf("%*s%s\n",spc_cnt," ",pent ->d_name);
            print_tree(pent ->d_name, spc_cnt + 5);
        }else
        {
            printf("%*s%s\n",spc_cnt," ",pent ->d_name);
        }
    }

    closedir(pdir);
    chdir(old_path); //程序结束切换回原来的目录
}

编程实现LINUX下目录的层层遍历,布布扣,bubuko.com

时间: 2024-10-13 22:26:50

编程实现LINUX下目录的层层遍历的相关文章

编程实现Linux下的ls -l

头文件 #ifndef __FUNC_H__ #define __FUNC_H__ #include<stdio.h> #include <stdio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <dirent.h> #include <sys/stat.h> #inc

Linux下目录的合并以及文件的覆盖

有两个目录test和new,test目录下有目录和文件,new目录下有更改过的一些test下的目录和文件,以及一些新增的文件,现在对两个目录进行合并以及覆盖test下的旧文件. cp -frap new/* test/ 命令其实非常简单,解释下: -f 强制覆盖,不询问yes/no(-i的默认的,即默认为交互模式,询问是否覆盖)-r 递归复制,包含目录-a 做一个备份,这里可以不用这个参数,我们可以先备份整个test目录-p 保持新文件的属性不变 记住一点就是,实现合并和覆盖是用cp,而不是mv

编程实现linux下的shell

/************************************************************************* > File Name: Kris_shell.c > Author: KrisChou > Mail:[email protected] > Created Time: Thu 21 Aug 2014 04:31:55 PM CST **************************************************

linux下目录与文件的权限及特殊权限

一.Linux下目录与文件的权限 chown    更改文件或目录的所属主,所属组   /etc/passwd 配置文件存放用户信息 useradd    添加用户 chown 所属主:所属组 文件或目录 chown -R    更改目录及目录下面的文件所有权限 chown -v    可视化显示权限更改 [[email protected] tmp]# chown user1:root aa [[email protected] tmp]# ls -l drwxr-xr--. 2 user1 

Linux下的tree命令 --Linux下目录树查看

Linux下的tree命令 --Linux下目录树查看 有时我们需要生成目录树结构,可以使用的有ls -R,但是实际效果并不好 这时需要用到tree命令,但是大部分Linux系统是默认不安装该命令的,需要自己安装一下;tree的常见用法: tree -a  #显示所有 tree -d  #仅显示目录 tree -L n  #n代表数字..表示要显示几层... tree -f  #显示完整路径..

linux下实现ls()函数遍历目录

需求:在linux下遍历目录,输出目录中各文件名. 在linux下遍历目录的相关函数有: #include <dirent.h> DIR* opendir(const char* dir_path); struct dirent* readdir(DIR* dirp); int closedir(DIR* dirp); int lstat(const chat* filename,struct stat* st); 在这里涉及到几个结构体:DIR,struct dirent,struct st

liunx学习(一):linux下目录操作大全

Linux C函数之文件及目录函数(全):http://blog.sina.com.cn/s/blog_695e489c01013ldd.html linux目录操作发:http://www.cnblogs.com/onlycxue/p/3154341.html linux中遍历文件夹下的所有文件 :http://www.jb51.net/article/37664.htm Linux下C获取文件夹下所有文件名:http://blog.csdn.net/sinat_30071459/articl

linux下目录及终端学习

linux目录按调用分为相对路径与绝对路径 相对路径:从当前路径下查找查找目标也可使用./调用当前目录下文件或者../调用上一层目录中文件,可通过pwd查看当前路径 绝对路径:从根目录出发查找文件. 执行cat /etc/passwd命令时由于引用绝对路径,将从根目录直接查找到etc目录,在查找到passwd文件.若采取相对路径,假设当前目录为etc文件,可直接执行cat passwd或者cat ./passwd查找passwd文件. linux下切换目录为cd命令,cd命令也支持相对路径与绝对

linux下目录读权限与执行权限区别

如果你在linux下用过ls,细心的你会发现目录竟然有可执行权限!如: drwxrwxr-x 11 cl cl 4096  9月 25 14:22 ./ drwxr-xr-x 49 cl cl 4096 10月 10 16:00 ../ drwxrwxr-x  5 cl cl 4096  9月 23 10:58 algorithm/ drwxrwxr-x  2 cl cl 4096  9月 23 21:44 temp/ why?? 在网上查了一下才发现是这个意思: 目录的可执行权限是表示你可否在