• LINUX下用C语言历遍目录 C语言列出目录 dirent.h在C/C++中的使用


    LINUX下历遍目录的方法一般是这样的
    打开目录-》读取-》关闭目录
    相关函数是
    opendir -> readdir -> closedir

    #include <dirent.h
    >
    DIR *opendir(const char *dirname
    );


    #include <dirent.h
    >
    struct dirent *readdir(DIR *dirp
    );


    #include <
    dirent.h
    >
    int closedir(DIR *dirp
    );

    好了,三个函数都出来了呵呵,原型就是上面,给自己解释一下免得以后我自己忘了呵呵!我以经忘过好几回了,所以这次放上博客来
    opendir用于打开目录,是类似于流的那种方式,返回一个指向DIR结构体的指针他的参数*dirname是一个字符数组或者字符串常量,
    readdir函数用于读取目录,他只有一个参数,这个参数主opendir返回的结构体指针,或者叫句柄更容易理解些吧。这个函数也返回一个结构体指针 dirent *
    dirent的结构如下定义
    struct dirent
    {
    long d_ino;                     
    off_t d_off;                    
    unsigned short d_reclen;        
    char d_name [NAME_MAX+1];       
    }
    结构体中d_ino存放的是该文件的结点数目,什么是结点数目呢我也说不清楚了呵呵,查一下其它资料了(这里应该不是节点数目,而是其下文件的索引节点号inode)
    d_off 是文件在目录中的编移,具体是什么意思我也不是很明白,我很少用到它,其本上就是用到d_name ,short d_reclen是这个文件的长度,需要注意的是这里的长度并不是指文件大小,因为大小和长度是2回事了,你可以用lseek将文件长度移得很长,但大小其实还是那么大.最后一个元素就是我们要的了,文件名称!
    写了一个实例:


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

    void print_usage(void);

    void print_usage(void)
    {
    printf("Usage: test dirname ");
    }

    int main(int argc,char *argv[])
    {
    DIR * dp;
    struct dirent *filename;

    if (argc < 2)
    {
    print_usage();
    exit(1);
    }

    dp = opendir(argv[1]);
    if (!dp)
    {
    fprintf(stderr,"open directory error ");
    return 0;
    }
    while (filename=readdir(dp))
    {
    printf("filename:%-10s d_info:%ld d_reclen:%us ",
    filename->d_name,filename->d_ino,filename->d_reclen);
    }
    closedir(dp);
    return 0;
    }

  • 相关阅读:
    PCB 铺铜 转载
    VC++ 学习笔记3 获取编辑框字符串
    VC++ 学习笔记2 列表框添加字符串
    VC++组合框——学习笔记1(组合框选项的添加和无法显示下拉选项)
    微信蓝牙ble记录
    最近遇到的问题与分析还有可能的结果
    注入与以往的开发思路
    abp的权限与导航菜单的关系
    ionic入坑记记录
    abp相关
  • 原文地址:https://www.cnblogs.com/onlycxue/p/3154341.html
Copyright © 2020-2023  润新知