博客
关于我
LINUX读取一个目录
阅读量:142 次
发布时间:2019-02-28

本文共 3065 字,大约阅读时间需要 10 分钟。


使用的函数:GNU命令行处理函数getopt(),getopt_long()。
            opendir(),readdir(),closedir()

熟悉GNU命令行处理函数,以及linux目录函数。

#include <sys/types.h>#include <dirent.h>#include <stdio.h>#include <unistd.h>#include <getopt.h>#define err_quit printf#define err_sys  printf#define TRUE         1#define FALSE        0#define EXIT_FAILE   0#define EXIT_SUCESS  1#define bool         charstatic char g_cur_dir[256] = "";int read_directory(char *dir_name, bool brecurse);void usage(char state, char *str);int main(int argc, char **argv){    int       c;    char      recurse = 0;    struct option long_option[]= {        {"dirname", no_argument,       NULL,  0 },         {"recurse", optional_argument, NULL, 'r'},        {"help",    no_argument,       NULL, 'h'},        {0,         0,                 0,     0 },    };    //read current directory.    //if no any params, read current dir files.    if(argc < 2)    {        read_directory("./", TRUE);        return ;    }    //read command line params.    while((c = getopt_long(argc, argv, "hr::", long_option, NULL)) != EOF)    //while((c = getopt(argc, argv, ":hr::")) != EOF)    {        switch(c)        {            case 'r':                recurse = 1;                break;            case 'h':                usage(EXIT_SUCESS, argv[0]);                break;            default:                usage(EXIT_FAILE, argv[0]);                break;        }    }    if (recurse && (optind == argc))    {        read_directory("./", TRUE);        exit(0);    }    //read all files from argv[optind].    for(; optind < argc; ++optind)    {        read_directory(argv[optind], recurse);    }    exit(0);}int read_directory(char *dir_name, bool brecurse){       DIR            *dp;    struct dirent  *dir;    strcpy(g_cur_dir, dir_name);    if (g_cur_dir[strlen(g_cur_dir) -1] == '/')        g_cur_dir[strlen(g_cur_dir) -1] = 0;    if ((dp = opendir(dir_name)) == NULL)     {        err_sys("can't open %s. /n", dir_name);        return ;    }    while( (dir = readdir(dp)) != NULL)    {        if ( brecurse && (DT_DIR == dir->d_type)                 && (strcmp(dir->d_name, ".") != 0)                 && (strcmp(dir->d_name, "..") != 0) )        {            printf("%s/", g_cur_dir);            printf("%s/n", dir->d_name);            strcat(g_cur_dir, "/");            strcat(g_cur_dir, dir->d_name);            read_directory(g_cur_dir, brecurse);            g_cur_dir[strlen(g_cur_dir) - strlen(dir->d_name) - 1] = 0;         }        else        {            printf("%s/", g_cur_dir);            printf("%s/n", dir->d_name);        }    }    closedir(dp);}void usage(char state, char *str){    if (state == EXIT_FAILE)    {        printf("/n");    }    else    {        printf("/n");        printf("========================================/n");        printf("read directory:/n");        printf("/n");        printf("Usage: %s [-r] [directory]/n/n", str);        printf("       -r: read all files under each directory, recursively. /n");        printf("========================================/n");        printf("/n");        exit(0);    }}


转载地址:http://ubld.baihongyu.com/

你可能感兴趣的文章
剑指offer JZ15 反转链表
查看>>
剑指offer JZ21 栈的压入弹出序列
查看>>
剑指offer JZ31 整数中1出现的次数
查看>>
实现基于scrapy框架的天气预报爬虫hengYangSpaider @572311文
查看>>
maven打包指定名称并去除jar-with-dependencies后缀
查看>>
Netty4服务端入门代码示例
查看>>
java连接mysql,jdbc驱动
查看>>
C++中的static成员函数以及static成员变量详解
查看>>
操作系统前传第六课--开发中的辅助工具
查看>>
Linux系统编程44 信号 - 信号的响应过程分析!!!
查看>>
win10正版系统安装 win10系统启动盘制作 小白装机第一步(U盘装机)
查看>>
VL53L0x TOF激光测距的 stm32 HAL库驱动代码
查看>>
怎么玩LOG4J
查看>>
Oracle创建用户,分配表空间
查看>>
自定义标签(JSP2.0)简单标签
查看>>
MyBatis自定义类型转换器
查看>>
机器学习(湖北师范大学教程)-极大似然估计算法
查看>>
2019年下半年总结
查看>>
读《红楼梦》有感
查看>>
【C# 重构】—参数化查询, 需要参数,但未提供该参数
查看>>