struct dirent 和 struct stat 结构体

更多资料请点击:我的目录

一、struct dirent
1、包含头文件

#include <dirent.h>

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

使用:

DIR *dp = opendir(src);		//打开目录src,并拷贝到(DIR定义)目录dp
struct dirent *dirp;		//dirp指向结构dirent(dirp命名自定义)
dirp = readdir(dp);			//返回参数dp目录流的下个目录进入点
dirp -> d_name;				//通过dirp 指向(->)文件名(d_name),从而获取dp/src的文件名

获取属性时通过“->”实现: dirp -> d_name / dirp -> d_type / dirp -> d_reclen

-------------------------------------------分割线-------------------------------------------------

二、struct stat
1、需要包含de头文件

#include <sys/types.h>    
#include <sys/stat.h> 

2、struct stat 结构

struct stat  
{   
    dev_t       st_dev;     /* ID of device containing file -文件所在设备的ID*/  
    ino_t       st_ino;     /* inode number -inode节点号*/    
    mode_t      st_mode;    /* protection -保护模式?*/    
    nlink_t     st_nlink;   /* number of hard links -链向此文件的连接数(硬连接)*/    
    uid_t       st_uid;     /* user ID of owner -user id*/    
    gid_t       st_gid;     /* group ID of owner - group id*/    
    dev_t       st_rdev;    /* device ID (if special file) -设备号,针对设备文件*/    
    off_t       st_size;    /* total size, in bytes -文件大小,字节为单位*/    
    blksize_t   st_blksize; /* blocksize for filesystem I/O -系统块的大小*/    
    blkcnt_t    st_blocks;  /* number of blocks allocated -文件所占块数*/    
    time_t      st_atime;   /* time of last access -上次存取时间*/    
    time_t      st_mtime;   /* time of last modification -上次修改时间*/    
    time_t      st_ctime;   /* time of last status change - 创建时间*/    
};  

3、我们使用最多的属性是st_mode.通过着属性我们可以判断给定的文件是一个普通文件还是一个目录,连接等等.可以使用下面几个宏来判断:

S_ISLNK(st_mode)是否是一个连接.
S_ISREG(st_mode)是否是一个常规文件.
S_ISDIR(st_mode)是否是一个目录
S_ISCHR(st_mode)是否是一个字符设备.
S_ISBLK(st_mode)是否是一个块设备
S_ISFIFO(st_mode)是否是一个FIFO文件.
S_ISSOCK(st_mode)是否是一个SOCKET文件. 

使用:

struct stat info;						//info指向结构stat(info命名自定义)	
bzero(&info, sizeof(info));				//初始化为0
stat(argv[1], &info);					//函数 stat,用来获取文件argv[1]的属性
if(S_ISREG(info.st_mode))				// 判断文件的类型

获取属性时通过“.”实现: info.st_mode / info.st_size / info.st_ctime

更多资料请点击:我的目录

发布了75 篇原创文章 · 获赞 35 · 访问量 5842

猜你喜欢

转载自blog.csdn.net/weixin_43793181/article/details/104324373