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

更多資料請點擊:我的目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章