linux下c++判断文件夹空,DIR,dirent,stat等结构体详解
DIR结构体的定义:
·
关于三个结构体的定义:
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.
更多推荐
已为社区贡献1条内容
所有评论(0)