opendir()和readdir()函数

1. opendir()

头文件

  #include<sys/types.h>

  #include<dirent.h>

函数原型

  DIR* opendir (const char * path ); (获取path子目录下的所由文件和目录的列表,如果path是个文件则返回值为NULL)

功能

  打开一个目录,在失败的时候返回一个空的指针。

        错误代码:
        1、EACCESS 权限不足。
        2、EMFILE 已达到进程可同时打开的文件数上限。
        3、ENFILE 已达到系统可同时打开的文件数上限。
        4、ENOTDIR 参数name 非真正的目录。
        5、ENOENT 参数name 指定的目录不存在, 或是参数name 为一空字符串。
        6、ENOMEM 核心内存不足。

返回值(DIR)

       DIR 结构体的原型为:struct_dirstream

struct __dirstream   
   {   
    void *__fd;    
    char *__data;    
    int __entry_data;    
    char *__ptr;    
    int __entry_ptr;    
    size_t __allocation;    
    size_t __size;    
    __libc_lock_define (, __lock)    
   };   
typedef struct __dirstream DIR;
DIR结构体类似于FILE,是一个内部结构,以下几个函数用这个内部结构保存当前正在被读取的目录的有关信息(摘自《UNIX环境高级编程(第二版)》)。函数 DIR *opendir(const char *pathname),即打开文件目录,返回的就是指向DIR结构体的指针,而该指针由以下几个函数使用:
struct dirent *readdir(DIR *dp);   
void rewinddir(DIR *dp);   
int closedir(DIR *dp);   
long telldir(DIR *dp);   
void seekdir(DIR *dp,long loc);  

2.readdir

头文件

#include<dirent.h>

函数原型

struct dirent* readdir(DIR* dir_handle); (个人理解循环读取dir_handle,目录和文件都读)

功能

读取opendir 返回值的那个列表

返回值

返回dirent结构体指针,dirent结构体成员如下,(文件和目录都行)

struct dirent   
{   
  long d_ino; /* inode number 索引节点号 */  
     
    off_t d_off; /* offset to this dirent 在目录文件中的偏移 */  
     
    unsigned short d_reclen; /* length of this d_name 文件名长 */  
     
    unsigned char d_type; /* the type of d_name 文件类型 */  
     
    char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */  
}


猜你喜欢

转载自blog.csdn.net/cainiao000001/article/details/80988738