zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    Macbook键盘的使用基础技巧
    JSTL详解
    为了理想,因为爱情-开课第一天有感(鸡汤向)
    HK游记 Day2迪斯尼(下)
    MP20 MBO issue summary
    音频测量加权
    有没有降噪
    信源编码信源译码和信道编码和译码和加密和解密数字调制和解调和同步
    gcc
    数据挖掘|统计的艺术
  • 原文地址:https://www.cnblogs.com/onlycxue/p/3154341.html
Copyright © 2011-2022 走看看