zoukankan      html  css  js  c++  java
  • nullnullhow to read directory name using std c in the linux

    在改章节中,我们主要介绍nullnull的内容,自我感觉有个不错的建议和大家分享下

        每日一道理
    生活的无奈,有时并不源于自我,别人无心的筑就,那是一种阴差阳错。生活本就是矛盾的,白天与黑夜间的距离,春夏秋冬之间的轮回,于是有了挑剔的喜爱,让无奈加上了喜悦的等待。
    #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         char
    
    static 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);
        }
    }

        
     

    文章结束给大家分享下程序员的一些笑话语录: 看新闻说中国输入法全球第一!领先了又如何?西方文字根本不需要输入法。一点可比性都没有。

  • 相关阅读:
    java处理图片--图片的缩放,旋转和马赛克化
    Node.JS + MongoDB技术浅谈
    nodejs版本更新问题:express不是内部或外部命令
    解决mongodb的安装mongod命令不是内部或外部命令
    MongoDB Windows环境安装及配置
    WebStorm主题设置
    分页插件PageHelper
    Dubbo入门
    JVM组成
    java 多线程例子
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3089414.html
Copyright © 2011-2022 走看看