zoukankan      html  css  js  c++  java
  • Linux下目录遍历&结构体dirent

    在linux下遍历某一目录下内容LINUX下历遍目录的方法一般是这样的
    打开目录->读取->关闭目录
    相关函数是opendir -> readdir -> closedir,其原型如下:
    #include <dirent.h>
    DIR *opendir(const char *dirname);
    struct dirent *readdir(DIR *dirp);
    int closedir(DIR *dirp);

    简单列举一例:

    #include<dirent.h>    

      

            struct dirent* ent = NULL;
            DIR
    *pDir;
            

           
    if( (pDir=opendir("/home/test")) == NULL)
            {
                    printf(
    "open dir %s failed\n", pszBaseDir);
                   
    return false;
            }

           
    while( (ent=readdir(pDir)) != NULL )
            {
                  printf("the ent->d_reclen is%d the ent->d_type is%d the ent->d_name is%s\n", ent->d_reclen, ent->d_type, ent->d_name);  

             }


            closedir(pDir);

     

    其中有一很关键的结构体dirent:

    代码
    On Linux, the dirent structure is defined as follows:

    struct dirent {
    ino_t d_ino;
    /* inode number */
    off_t d_off;
    /* offset to the next dirent */
    unsigned
    short d_reclen; /* length of this record */
    unsigned
    char d_type; /* type of file */
    char d_name[256]; /* filename */
    };

    其中inode表示存放的是该文件的结点数目(具体可了解linux下的文件系统),d_off 是文件在目录中的编移,这两个基本很少用。

    d_type表示档案类型:

    enum
    {
        DT_UNKNOWN = 0,
    # define DT_UNKNOWN DT_UNKNOWN
        DT_FIFO = 1,
    # define DT_FIFO DT_FIFO
        DT_CHR = 2,
    # define DT_CHR DT_CHR
        DT_DIR = 4,
    # define DT_DIR DT_DIR
        DT_BLK = 6,
    # define DT_BLK DT_BLK
        DT_REG = 8,
    # define DT_REG DT_REG
        DT_LNK = 10,
    # define DT_LNK DT_LNK
        DT_SOCK = 12,
    # define DT_SOCK DT_SOCK
        DT_WHT = 14
    # define DT_WHT DT_WHT
    };
    

    d_reclen认为是纪录的长度,计算方式应该是4(d_ino)+4(d_off)+2(d_reclen)+1(d_type)+1(补齐位)+4N(d_name会自动补齐:1.jpg为8,12.jpg也为8,1234.jpg也为8,12345.jpg则为12);所以一般d_reclen是20和24(其中.和..是16)。

    d_name表示文件名,如test.jpg

  • 相关阅读:
    Oracle Time Model Statistics(时间模型统计)
    IBAction:IBOutlet:注意事项
    函数何时值传递,何时指针,何时引用传递总结
    更新客户配置文件
    UML的通用机制(三)
    数学之路-数据分析进阶-区间预计与如果检验(2)
    android应用开发-从设计到实现 3-3 Sketch静态原型设计
    测试MongoDB的自动分片
    详解MongoDB中的多表关联查询($lookup) (转)
    mongodb移除分片和添加分片(转)
  • 原文地址:https://www.cnblogs.com/beauty/p/1822535.html
Copyright © 2011-2022 走看看