opendir()和readdir()函数

239 篇文章 10 订阅

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字符 */  
}

————————————————
版权声明:本文为CSDN博主「cainiao000001」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cainiao000001/article/details/80988738

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值