struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* Inode number */
mode_t st_mode; /* File type and mode */
nlink_t st_nlink; /* Number of hard links */
uid_t st_uid; /* User ID of owner */
gid_t st_gid; /* Group ID of owner */
dev_t st_rdev; /* Device ID (if special file) */
off_t st_size; /* Total size, in bytes */
blksize_t st_blksize; /* Block size for filesystem I/O */
blkcnt_t st_blocks; /* Number of 512B blocks allocated */
/* Since Linux 2.6, the kernel supports nanosecond
precision for the following timestamp fields.
For the details before Linux 2.6, see NOTES. */
struct timespec st_atim; /* Time of last access */
struct timespec st_mtim; /* Time of last modification */
struct timespec st_ctim; /* Time of last status change */
#define st_atime st_atim.tv_sec /* Backward compatibility */
#define st_mtime st_mtim.tv_sec
#define st_ctime st_ctim.tv_sec
};
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *pathname, struct stat *statbuf);
int fstat(int fd, struct stat *statbuf);
int lstat(const char *pathname, struct stat *statbuf);
pathname : 파일 경로
fd : File descriptor
statbuf : 파일 속성을 저장할 구조체
성공 시 : 0
실패 시 : -1
S_ISREG(statbuf.st_mode) //Regular file?
S_ISDIR(statbuf.st_mode) //Directory?
S_ISCHR(statbuf.st_mode) //Character device?
S_ISBLK(statbuf.st_mode) //Block device?
S_ISFIFO(statbuf.st_mode) //FIFO?
S_ISLNK(statbuf.st_mode) //Symbolic link?
S_ISSOCK(statbuf.st_mode) //Socket?
static void show_file_info(const char * const file)
{
struct stat statbuf;
if(stat(file, &statbuf) < 0){
perror("stat() FAIL\n");
return;
}
printf("Name : %s\n", file);
printf("Type : ");
if(S_ISREG(statbuf.st_mode)){
printf("Regular file");
}
else if(S_ISDIR(statbuf.st_mode)){
printf("Directory");
}
else {
printf("The others");
}
printf("\n");
printf("Size : %ld\n", statbuf.st_size);
}