zoukankan      html  css  js  c++  java
  • Linux c —— opendir函数和readdir函数内涵及用法(转)

    opendir函数

    头文件:#include <sys/types.h>  #include <dirent.h>

    函数:DIR *opendir(const char *name);

    含义: opendir()用来打开参数name 指定的目录, 并返回DIR*形态的目录流, 和open()类似, 接下来对目录的读取和搜索都要使用此返回值.

    关于DIR : 详细:http://blog.csdn.net/u012349696/article/details/50083787

    先说说DIR这一结构体,以下为DIR结构体的定义:

     1 struct __dirstream   
     2    {   
     3     void *__fd;    
     4     char *__data;    
     5     int __entry_data;    
     6     char *__ptr;    
     7     int __entry_ptr;    
     8     size_t __allocation;    
     9     size_t __size;    
    10     __libc_lock_define (, __lock)    
    11    };   
    12   
    13 typedef struct __dirstream DIR;  

    DIR结构体类似于FILE,是一个内部结构,以下几个函数用这个内部结构保存当前正在被读取的目录的有关信息(摘自《UNIX环境高级编程(第二版)》)。函数 DIR *opendir(const char *pathname),即打开文件目录,返回的就是指向DIR结构体的指针,而该指针由以下几个函数使用:

    1 struct dirent *readdir(DIR *dp);   
    2   
    3 void rewinddir(DIR *dp);   
    4   
    5 int closedir(DIR *dp);   
    6   
    7 long telldir(DIR *dp);   
    8   
    9 void seekdir(DIR *dp,long loc);  

    关于DIR结构,我们知道这么多就可以了,没必要去再去研究他的结构成员。

    .....

    readdir函数

    头文件:#include<sys/types.h> #include <dirent.h>

    函数:struct dirent *readdir(DIR *dir);

    含义:readdir()返回参数dir 目录流的下个目录进入点。

    struct dirent
    {
        ino_t d_ino; //d_ino 此目录进入点的inode
        ff_t d_off; //d_off 目录文件开头至此目录进入点的位移
        signed short int d_reclen; //d_reclen _name 的长度, 不包含NULL 字符
        unsigned char d_type; //d_type d_name 所指的文件类型 d_name 文件名
        har d_name[256];
    };

    closedir函数 

    头文件:#include<sys/types.h> #include <dirent.h>

    函数;closedir(DIR *dir);

    含义:关闭dir流 ;

    示例,扫描目录下的jpg文件:

     1 std::vector<std::string> filelist;
     2     DIR * dirp=opendir(imagepath);
     3     struct dirent *directory;
     4     if (dirp)
     5     {
     6         while ((directory = readdir(dirp)) != NULL)
     7         {
     8           if(strlen(directory->d_name)<=4)
     9               continue;
    10           
    11           char buf[5];
    12           memcpy(buf,&(directory->d_name[strlen(directory->d_name)-4]),4);
    13           buf[4]='';
    14           
    15           if(strcmp(buf,".jpg")==0)
    16           {
    17               printf("%s
    ", directory->d_name);
    18               filelist.push_back(directory->d_name);
    19           }
    20         }
    21 
    22         closedir(dirp);
    23     }
    24     else
    25         printf("cannot open directory %s !",imagepath);

    转自:https://blog.csdn.net/u012349696/article/details/50084195

  • 相关阅读:
    PyQt QFontDialog显示中文
    zetcode :: First programs in PyQt5
    PyQt4 初试牛刀二
    PyQt5实现透明电子时钟
    配置web.xml和glassfish容器实现javaEE表单验证
    nodejs querystring踩坑笔记----只能用于表单提交
    使用JavaEE的ServerAuthModule模块和web.xml进行相应配置,实现对用户的权限控制
    CAS单点登录(SSO)服务端的部署和配置---连接MySQL进行身份认证
    Oracle中碰到的函数和关键字收集
    windows系统局域网内开启远程桌面图解
  • 原文地址:https://www.cnblogs.com/zl1991/p/8780246.html
Copyright © 2011-2022 走看看