linux下c++判断文件夹空,DIR,dirent,stat等结构体详解
关于三个结构体的定义:
http://www.liweifan.com/2012/05/13/linux-system-function-files-operation/
DIR结构体的定义:
<span style="font-family:SimSun;font-size:12px;">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; </span>
dirent不仅仅指向目录,还指向目录中的具体文件,readdir函数同样也读取目录下的文件,这就是证据。以下为dirent结构体的定义:
<span style="font-family:SimSun;font-size:12px;">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字符 */ } </span>
通过readdir函数读取到的文件名存储在结构体dirent的d_name成员中,而函数
int stat(const char *file_name, struct stat *buf);
的作用就是获取文件名为d_name的文件的详细信息,存储在stat结构体中。以下为stat结构体的定义:
<span style="font-family:SimSun;font-size:12px;">struct stat { mode_t st_mode; //文件访问权限 ino_t st_ino; //索引节点号 dev_t st_dev; //文件使用的设备号 dev_t st_rdev; //设备文件的设备号 nlink_t st_nlink; //文件的硬连接数 uid_t st_uid; //所有者用户识别号 gid_t st_gid; //组识别号 off_t st_size; //以字节为单位的文件容量 time_t st_atime; //最后一次访问该文件的时间 time_t st_mtime; //最后一次修改该文件的时间 time_t st_ctime; //最后一次改变该文件状态的时间 blksize_t st_blksize; //包含该文件的磁盘块的大小 blkcnt_t st_blocks; //该文件所占的磁盘块 }; </span>
#include <iostream> #include <sys/types.h> #include <dirent.h> using namespace std; int main(int argc , char **argv) { DIR *dirp; int num=0; dirp = opendir(argv[1]); while(dirp) { if(readdir(dirp) != NULL) ++num; else break; } closedir(dirp); cout<<num<<endl; }
建立一个空文件夹,输出问2,其中包含 . 和 ..两个文件
touch一个空文件,输出为3.
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: linux C之stat()
- 下一篇: linux struct stat 结构