DIR stat dirent 结构体 及其用法

首先谈一下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,是一个内部结构,函数 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);  

 

接着是dirent结构体,以下为dirent结构体的定义:

 

  1. struct dirent   
  2. {   
  3.   long d_ino;   
  4.      
  5.     off_t d_off;   
  6.      
  7.     unsigned short d_reclen;   
  8.      
  9.     unsigned char d_type;   
  10.      
  11.     char d_name [NAME_MAX+1];   
  12.  

 

从上述定义也能够看出来,dirent结构体存储的关于文件的信息很少,所以dirent同样也是起着一个索引的作用,如果想获得类似ls -l那种效果的文件信息,必须要靠stat函数了。

通过readdir函数读取到的文件名存储在结构体dirent的d_name成员中,而函数

int stat(const char *file_name, struct stat *buf);

的作用就是获取文件名为d_name的文件的详细信息,存储在stat结构体中。以下为stat结构体的定义:

 

  1. struct stat {   
  2.   
  3.         mode_t     st_mode;       //文件访问权限   
  4.   
  5.         ino_t      st_ino;       //索引节点号   
  6.   
  7.         dev_t      st_dev;        //文件使用的设备号   
  8.   
  9.         dev_t      st_rdev;       //设备文件的设备号   
  10.   
  11.         nlink_t    st_nlink;      //文件的硬连接数   
  12.   
  13.         uid_t      st_uid;        //所有者用户识别号   
  14.   
  15.         gid_t      st_gid;        //组识别号   
  16.   
  17.         off_t      st_size;       //以字节为单位的文件容量   
  18.   
  19.         time_t     st_atime;      //最后一次访问该文件的时间   
  20.   
  21.         time_t     st_mtime;      //最后一次修改该文件的时间   
  22.   
  23.         time_t     st_ctime;      //最后一次改变该文件状态的时间   
  24.   
  25.         blksize_t st_blksize;    //包含该文件的磁盘块的大小   
  26.   
  27.         blkcnt_t   st_blocks;     //该文件所占的磁盘块   
  28.   
  29.       };  


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值