//原型structdirent{long d_ino;/* inode number 索引节点号 */off_t d_off;/* offset to this dirent 在目录文件中的偏移 */unsignedshort d_reclen;/* length of this d_name 文件名长 */unsignedchar d_type;/* the type of d_name 文件类型 */char d_name [256];/* file name (null-terminated) 文件名 */}//使用方式structdirent*dirp;
DIR *dp =opendir(const cahr *name);//打开目录
dirp =readdir(dp);//获取dp目录流的下个节点
3.struct stat结构体
//原型structstat{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 - 创建时间*/};//使用方式//原型int stat(const char *pathname, struct stat *statbuf);structstat info
stat(filePath,&info);// 获取文件信息/*其中比较常用的就是获取文件类型 mode_t st_mode
info.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文件.*/if(S_ISDIR(info.st_mode))//是否为目录判断
二、创建多级目录
voidcreate_multistage_dir(char*dir){int i, len;char str[1024]={0};strcpy(str, dir);
len =strlen(str);for(i =0; i < len; i++){if(str[i]=='/'){
str[i]='\0';if(access(str, F_OK)!=0)mkdir(str,0777);
str[i]='/';}}if(len >0&&access(str, F_OK)!=0)// 检测是否创建成功mkdir(str,0777);return;}