更多資料請點擊:我的目錄
一、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
更多資料請點擊:我的目錄