stat(2) - wariua/manpages-ko GitHub Wiki
stat, fstat, lstat, fstatat - νμΌ μν μ 보 μ»κΈ°
#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);
#include <fcntl.h> /* AT_* μμ μ μ */
#include <sys/stat.h>
int fstatat(int dirfd, const char *pathname, struct stat *statbuf,
int flags);glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
lstat(): -
/* glibc 2.19 λ° μ΄μ : */ _BSD_SOURCE
|| /* glibc 2.20λΆν° */ _DEFAULT_SOURCE
|| _XOPEN_SOURCE >= 500
|| /* glibc 2.10λΆν°: */ _POSIX_C_SOURCE >= 200112L -
fstatat(): -
- glibc 2.10λΆν°:
_POSIX_C_SOURCE >= 200809L- glibc 2.10 μ :
_ATFILE_SOURCE
μ΄ ν¨μλ€μ νμΌμ λν μ 보λ₯Ό statbufκ° κ°λ¦¬ν€λ λ²νΌλ‘ λ°ννλ€. κ·Έ νμΌ μ체μ λν΄μ μ΄λ€ κΆνλ νμμΉ μμ§λ§ (stat(), fstatat(), lstat()μμλ) pathnameμμ κ·Έ νμΌκΉμ§ μ΄μ΄μ§λ λλ ν°λ¦¬ λͺ¨λμ λν΄ μ€ν(νμ) κΆνμ΄ νμνλ€.
stat()κ³Ό fstatat()μ pathnameμ΄ κ°λ¦¬ν€λ νμΌμ λν μ 보λ₯Ό κ°μ Έμ¨λ€. fstatat()μ μ°¨μ΄μ μ μλμμ μ€λͺ
νλ€.
lstat()μ stat()κ³Ό λμΌνλ pathnameμ΄ μ¬λ³Όλ¦ λ§ν¬μΈ κ²½μ°μλ λμ νμΌμ΄ μλλΌ λ§ν¬ μ체μ λν μ 보λ₯Ό λ°ννλ€.
fstat()μ stat()κ³Ό λμΌνλ μ΄λ€ νμΌμ λν μ 보λ₯Ό κ°μ Έμ¬μ§λ₯Ό νμΌ λμ€ν¬λ¦½ν° fdλ‘ μ§μ νλ€.
μ΄ μμ€ν
νΈμΆλ€μ λͺ¨λ stat ꡬ쑰체λ₯Ό λ°ννλλ°, μ΄λ λ€μ νλλ€μ λ΄κ³ μλ€.
struct stat {
dev_t st_dev; /* νμΌμ λ΄μ μ₯μΉμ ID */
ino_t st_ino; /* μμ΄λ
Έλ λ²νΈ */
mode_t st_mode; /* νμΌ μ’
λ₯ λ° λͺ¨λ */
nlink_t st_nlink; /* νλ λ§ν¬ μ */
uid_t st_uid; /* μμ μμ μ¬μ©μ ID */
gid_t st_gid; /* μμ μμ κ·Έλ£Ή ID */
dev_t st_rdev; /* μ₯μΉ ID (νΉμ νμΌμΈ κ²½μ°) */
off_t st_size; /* μ΄ ν¬κΈ°, λ°μ΄νΈ λ¨μ */
blksize_t st_blksize; /* νμΌ μμ€ν
I/Oμ λΈλ‘ ν¬κΈ° */
blkcnt_t st_blocks; /* ν λΉλ 512B λΈλ‘ μ */
/* 리λ
μ€ 2.6λΆν° 컀λμμ λ€μ νμμ€ν¬ν νλλ€μ
λλ
Έμ΄ μ λ°λλ₯Ό μ§μνλ€. 리λ
μ€ 2.6 μ μ λν
λ΄μ©μ NOTES μ°Έκ³ . */
struct timespec st_atim; /* μ΅κ·Ό μ κ·Ό μκ° */
struct timespec st_mtim; /* μ΅κ·Ό μμ μκ° */
struct timespec st_ctim; /* μ΅κ·Ό μν λ³κ²½ μκ° */
#define st_atime st_atim.tv_sec /* νμ νΈνμ± */
#define st_mtime st_mtim.tv_sec
#define st_ctime st_ctim.tv_sec
};μ£Όμ: stat ꡬ쑰체 λ΄ νλ μμκ° μν€ν
μ²μ λ°λΌ μ½κ° λ€λ₯΄λ€. λλΆμ΄ μ μ μμλ μ¬λ¬ μν€ν
μ²μμ μΌλΆ νλλ€ μ¬μ΄μ μλ ν¨λ© λ°μ΄νΈκ° λμ μμ§ μλ€. μμΈν λ΄μ©μ μ νμκ° μλ€λ©΄ glibc λ° μ»€λ μμ€ μ½λλ₯Ό νμΈν΄ 보λΌ.
μ£Όμ: μ±λ₯κ³Ό λ¨μμ±μ μν΄ stat ꡬ쑰체μ νλλ€μ΄ μμ€ν
νΈμΆ μ€ν μ€μ μμ΄ν μμ μ μν μ 보λ₯Ό λ΄μ μ μλ€. μλ₯Ό λ€μ΄ λ€λ₯Έ νλ‘μΈμ€μμ chmod(2)λ chown(2)μ νΈμΆν΄μ st_modeλ st_uidλ₯Ό λ°κΎΈλ κ²½μ°μ stat()μ΄ μ΄μ st_modeμ μ st_uidλ₯Ό λ°νν μλ μκ³ μ΄μ st_uidμ μ st_modeλ₯Ό λ°νν μλ μλ€.
stat ꡬ쑰체μ νλλ λ€μκ³Ό κ°λ€.
st_dev- μ΄ νλλ μ΄ νμΌμ΄ μμΉν μ₯μΉλ₯Ό κΈ°μ νλ€. (μ΄ νλμ μ₯μΉ IDλ₯Ό λΆν΄νλ λ° major(3) λ° minor(3) λ§€ν¬λ‘κ° μ μ©ν μ μλ€.)
st_ino- μ΄ νλλ νμΌμ μμ΄λ Έλ λ²νΈλ₯Ό λ΄λλ€.
st_mode- μ΄ νλλ νμΌ μ’ λ₯μ λͺ¨λλ₯Ό λ΄λλ€. μμΈν λ΄μ©μ inode(7) μ°Έκ³ .
st_nlink- μ΄ νλλ νμΌμ λν νλ λ§ν¬ μλ₯Ό λ΄λλ€.
st_uid- μ΄ νλλ νμΌ μμ μμ μ¬μ©μ IDλ₯Ό λ΄λλ€.
st_gid- μ΄ νλλ νμΌ κ·Έλ£Ή μμ μμ IDλ₯Ό λ΄λλ€.
st_rdev- μ΄ νλλ μ΄ νμΌμ΄ (μμ΄λ Έλκ°) λνλ΄λ μ₯μΉλ₯Ό κΈ°μ νλ€.
st_size- μ΄ νλλ (μ κ· νμΌμ΄λ μ¬λ³Όλ¦ λ§ν¬μΈ κ²½μ°) λ°μ΄νΈ λ¨μ νμΌ ν¬κΈ°λ₯Ό μλ € μ€λ€. μ¬λ³Όλ¦ λ§ν¬μ ν¬κΈ°λ λ΄κ³ μλ (μ’ λ£ λ λ°μ΄νΈ μλ) κ²½λ‘λͺ μ κΈΈμ΄λ€.
st_blksize- μ΄ νλλ ν¨μ¨μ μΈ νμΌ μμ€ν I/Oλ₯Ό μν "μ νΈ" λΈλ‘ ν¬κΈ°λ₯Ό μλ € μ€λ€.
st_blocks- μ΄ νλλ νμΌμ ν λΉλ 512λ°μ΄νΈ λ¨μ λΈλ‘ μλ₯Ό λνλΈλ€. (νμΌμ ꡬλ©μ΄ μμ λλ
st_size/512λ³΄λ€ μμ μλ μλ€. st_atime- νμΌμ μ΅κ·Ό μ κ·Ό νμμ€ν¬νλ€.
st_mtime- νμΌμ μ΅κ·Ό μμ νμμ€ν¬νλ€.
st_ctime- νμΌμ μ΅κ·Ό μν λ³κ²½ νμμ€ν¬νλ€.
μ νλλ€μ λν λ μμΈν λ΄μ©μ inode(7)λ₯Ό 보λΌ.
fstatat() μμ€ν
νΈμΆμ νμΌ μ 보μ μ κ·ΌνκΈ° μν λ²μ©μ μΈν°νμ΄μ€λ‘ stat(), lstat(), fstat() κ°κ°μ λμ λ°©μκΉμ§ μ ννκ² μ 곡ν μ μλ€.
pathnameμ μ€ κ²½λ‘λͺ
μ΄ μλ κ²½λ‘μ΄λ©΄ (μλ κ²½λ‘λͺ
μ λν΄ stat() λ° lstat()μμ νλ― νΈμΆ νλ‘μΈμ€μ νμ¬ μμ
λλ ν°λ¦¬λ₯Ό κΈ°μ€μΌλ‘ νλ κ² μλλΌ) νμΌ λμ€ν¬λ¦½ν° dirfdκ° κ°λ¦¬ν€λ λλ ν°λ¦¬λ₯Ό κΈ°μ€μΌλ‘ κ²½λ‘λͺ
μ ν΄μνλ€.
pathnameμ΄ μλ κ²½λ‘μ΄κ³ dirfdκ° νΉμ κ° AT_FDCWDμ΄λ©΄ (stat() λ° lstat()μ²λΌ) νΈμΆ νλ‘μΈμ€μ νμ¬ μμ
λλ ν°λ¦¬λ₯Ό κΈ°μ€μΌλ‘ pathnameμ ν΄μνλ€.
pathnameμ΄ μ λ κ²½λ‘μ΄λ©΄ dirfdλ₯Ό 무μνλ€.
flagsλ 0μΌ μλ μκ³ λ€μ νλκ·Έλ₯Ό 1κ° μ΄μ OR ν΄μ λ΄μ μλ μλ€.
-
AT_EMPTY_PATH(리λ μ€ 2.6.39λΆν°) -
pathnameμ΄ λΉ λ¬Έμμ΄μ΄λ©΄ (open(2)O_PATHνλκ·Έλ‘ μ»μ κ²μΌ μλ μλ)dirfdκ° κ°λ¦¬ν€λ νμΌμ λν΄ λμνλ€. μ΄ κ²½μ°μdirfdλ λλ ν°λ¦¬λ§μ΄ μλλΌ μμ μ’ λ₯μ νμΌμ κ°λ¦¬ν¬ μ μμΌλ©°fstatat()μ λμ λ°©μμfstat()κ³Ό λΉμ·νλ€.dirfdκ°AT_FDCWDμ΄λ©΄ νμ¬ μμ λλ ν°λ¦¬μ λν΄ νΈμΆμ΄ λμνλ€. μ΄ νλκ·Έλ 리λ μ€ μ μ©μ΄λ€. μ΄ μ μλ₯Ό μ»μΌλ €λ©΄_GNU_SOURCEλ₯Ό μ μν΄μΌ νλ€. -
AT_NO_AUTOMOUNT(리λ μ€ 2.6.38λΆν°) -
pathnameμ λ§μ§λ§ μμ("basename")κ° μλ λ§μ΄νΈ μ§μ μΈ λλ ν°λ¦¬μΈ κ²½μ°μ μλ λ§μ΄νΈλ₯Ό νμ§ μλλ€. μ΄λ₯Ό ν΅ν΄ (λ§μ΄νΈ λ μμΉκ° μλλΌ) μλ λ§μ΄νΈ μ§μ μ μμ±λ€μ νΈμΆμκ° μ»μ μ μλ€. λν 리λ μ€ 4.14λΆν°λ automounter κ°μ λ§΅ λ±μ μ°μ΄λ on-demand λλ ν°λ¦¬μ μ€μ¬νμ§ μλ μ΄λ¦μ λ§λ€μ΄ λ΄μ§ μλλ€. λλ ν°λ¦¬λ€μ νλ λꡬλ€μμ μ΄ νλκ·Έλ₯Ό μ¬μ©ν΄μ μλ λ§μ΄νΈ μ§μ μΈ λλ ν°λ¦¬λ₯Ό μλ© μλ λ§μ΄νΈ νλ κ±Έ λ°©μ§ν μ μλ€. λ§μ΄νΈ μ§μ μ μ΄λ―Έ λ§μ΄νΈκ° λμΌλ©΄AT_NO_AUTOMOUNTνλκ·Έμ μ무 ν¨λ ₯μ΄ μλ€. μ΄ νλκ·Έλ 리λ μ€ μ μ©μ΄λ€. μ΄ μ μλ₯Ό μ»μΌλ €λ©΄_GNU_SOURCEλ₯Ό μ μν΄μΌ νλ€.stat()κ³Όlstat()λͺ¨λAT_NO_AUTOMOUNTκ° μ€μ λ κ²μ²λΌ λμνλ€. AT_SYMLINK_NOFOLLOW-
pathnameμ΄ μ¬λ³Όλ¦ λ§ν¬μΈ κ²½μ° μμ°Έμ‘°λ₯Ό νμ§ μλλ€. λμlstat()μ²λΌ λ§ν¬ μ체μ λν μ 보λ₯Ό λ°ννλ€. (κΈ°λ³Έμ μΌλ‘fstatat()μstat()μ²λΌ μ¬λ³Όλ¦ λ§ν¬λ₯Ό μμ°Έμ‘° νλ€.)
fstatat()μ νμμ±μ λν μ€λͺ
μ openat(2)μ 보λΌ.
μ±κ³΅ μ 0μ λ°ννλ€. μ€λ₯ μ -1μ λ°ννλ©° errnoλ₯Ό μ μ ν μ€μ νλ€.
EACCES-
pathnameμ κ²½λ‘ μ λλΆμ ν λλ ν°λ¦¬μ λν΄ νμ κΆνμ΄ κ±°λΆλμλ€. (path_resolution(7) μ°Έκ³ .) EBADF-
fdκ° μ ν¨ν μ΄λ¦° νμΌ λμ€ν¬λ¦½ν°κ° μλλ€. EFAULT- μλͺ»λ μ£Όμ.
ELOOP- κ²½λ‘λͺ μ μννλ λμ λ무 λ§μ μ¬λ³Όλ¦ λ§ν¬λ₯Ό λ§λ¬λ€.
ENAMETOOLONG-
pathnameμ΄ λ무 κΈΈλ€. ENOENT-
pathnameμ μ΄λ μμκ° μ‘΄μ¬νμ§ μκ±°λ κΉ¨μ§ μ¬λ³Όλ¦ λ§ν¬μ΄λ€. ENOENT-
pathnameμ΄ λΉ λ¬Έμμ΄μΈλ°flagsμAT_EMPTY_PATHλ₯Ό μ§μ νμ§ μμλ€. ENOMEM- λ©λͺ¨λ¦¬ (μ¦ μ»€λ λ©λͺ¨λ¦¬) λΆμ‘±.
ENOTDIR-
pathnameμ κ²½λ‘ μ λλΆμ μ΄λ μμκ° λλ ν°λ¦¬κ° μλλ€. EOVERFLOW-
pathnameμ΄λfdκ° κ·Έ ν¬κΈ°, μμ΄λ Έλ λ²νΈ, λΈλ‘ μλ₯Ό κ°κΈ°off_t,ino_t,blkcnt_tνμ μΌλ‘ ννν μ μλ νμΌμ κ°λ¦¬ν€κ³ μλ€. μλ₯Ό λ€μ΄ 32λΉνΈ νλ«νΌμμ-D_FILE_OFFSET_BITS=64μμ΄ μ»΄νμΌ ν μμ©μ΄ ν¬κΈ°κ°(1<<31)-1λ°μ΄νΈλ₯Ό λλ νμΌμ μ΄λ €κ³ νλ κ²½μ°μ μ΄ μ€λ₯κ° λ°μν μ μλ€.
fstatat()μμ λ€μ μ€λ₯λ€μ΄ μΆκ°λ‘ λ°μν μ μλ€.
EBADF-
dirfdκ° μ ν¨ν νμΌ λμ€ν¬λ¦½ν°κ° μλλ€. EINVAL-
flagsμ μ ν¨νμ§ μμ νλκ·Έλ₯Ό μ§μ νλ€. ENOTDIR-
pathnameμ΄ μλ κ²½λ‘μΈλ°dirfdκ° λλ ν°λ¦¬ μλ νμΌμ κ°λ¦¬ν€λ νμΌ λμ€ν¬λ¦½ν°μ΄λ€.
리λ
μ€ μ»€λ 2.6.16μμ fstatat()μ΄ μΆκ°λμλ€. glibc λ²μ 2.4μμ λΌμ΄λΈλ¬λ¦¬ μ§μμ΄ μΆκ°λμλ€.
stat(), fstat(), lstat(): SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.
fstatat(): POSIX.1-2008.
POSIX.1-2001μ λ°λ₯΄λ©΄ μ¬λ³Όλ¦ λ§ν¬μ lstat()μ νλ©΄ stat ꡬ쑰체μ st_size νλμ st_mode νλμ νμΌ μ’
λ₯μλ§ μ ν¨ν μ 보λ₯Ό λ°ννλ©΄ λλ€. POSIX.1-2008μμλ λͺ
μΈλ₯Ό λ κ°νν΄μ lstat()μ΄ st_modeμ λͺ¨λ λΉνΈλ₯Ό μ μΈν λͺ¨λ νλλ€μ μ ν¨ν μ 보λ₯Ό λ°ννλλ‘ νλ€.
st_blocks λ° st_blksize νλλ₯Ό μ°λ©΄ μ΄μμ±μ΄ μ’ λ¨μ΄μ§ μλ μλ€. (λ νλλ BSDμμ λμ
λλ€. μμ€ν
μ λ°λΌ ν΄μ λ°©μμ΄ λ€λ₯΄κ³ , NFS λ§μ΄νΈκ° μμΌλ©΄ λ¨μΌ μμ€ν
λ΄μμλ λ€λ₯Ό μ μλ€.)
ꡬμ 컀λ λ° κ΅¬μ νμ€μμλ λλ
Έμ΄ νμμ€ν¬ν νλλ₯Ό μ§μνμ§ μμλ€. λμ time_t νμ
μΌλ‘ νμμ€ν¬ν νλ μΈ κ°(st_atime, st_mtime, st_ctime)κ° μμ΄μ μ΄ λ¨μλ‘ νμμ€ν¬νλ₯Ό κΈ°λ‘νλ€.
컀λ 2.5.48λΆν° stat ꡬ쑰체μ κ·Έ μΈ κ°μ§ νμμ€ν¬ν νλμμ λλ
Έμ΄ ν΄μλλ₯Ό μ§μνλ€. μ μ ν κΈ°λ₯ νμΈ λ§€ν¬λ‘κ° μ μλΌ μμΌλ©΄ κ° νμμ€ν¬νμ λλ
Έμ΄ λΆλΆμ st_atim.tv_nsec ννμ μ΄λ¦μΌλ‘ μΈ μ μλ€. λλ
Έμ΄ νμμ€ν¬νλ POSIX.1-2008μμ νμ€νλμΌλ©°, glibc λ²μ 2.12λΆν° _POSIX_C_SOURCEκ° 200809L μ΄μ κ°μΌλ‘ μ μλΌ μκ±°λ _XOPEN_SOURCEκ° 700 μ΄μ κ°μΌλ‘ μ μλΌ μμΌλ©΄ λλ
Έμ΄ λΆλΆ μ΄λ¦μ΄ λλ¬λλ€. glibc 2.19κΉμ§μμλ _BSD_SOURCEλ _SVID_SOURCEκ° μ μλΌ μλ κ²½μ°μλ λλ
Έμ΄ λΆλΆμ μ μκ° λλ¬λλ€. μμ μΈκΈν μ΄λ€ λ§€ν¬λ‘λ μ μλΌ μμ§ μμ κ²½μ°μλ st_atimensec ννμ μ΄λ¦μΌλ‘ λλ
Έμ΄ κ°λ€μ μΈ μ μλ€.
μκ°μ΄ νλ₯΄λ©° stat κ΅¬μ‘°μ²΄κ° μ»€μ§λ©΄μ μΈ κ°μ§ stat() λ²μ μ΄ μκ²Όλ€. i386 κ°μ 32λΉνΈ νλ«νΌμμ sys_stat() (μ¬λ‘― __NR_oldstat), sys_newstat() (μ¬λ‘― __NR_stat), κ·Έλ¦¬κ³ sys_stat64() (μ¬λ‘― __NR_stat64)μ΄λ€. μ²μ λ λ²μ μ (λ€λ₯Έ μ΄λ¦μ΄κΈ°λ νμ§λ§) 리λ
μ€ 1.0μλ μμμΌλ©°, λ§μ§λ§ λ²μ μ 리λ
μ€ 2.4μμ μΆκ°λλ€. λΉμ·ν λ΄μ©μ΄ fstat()κ³Ό lstat()μλ μ μ©λλ€.
κ° λ²μ μμ λ€λ£¨λ 컀λ λ΄λΆ stat ꡬ쑰체 λ²μ μ λ€μκ³Ό κ°λ€.
__old_kernel_stat- μλ ꡬ쑰체. νλλ€μ΄ μ’ μκ³ ν¨λ© μμ.
stat-
st_inoνλκ° μ»€μ§κ³ ν₯ν νμ₯μ μν΄ κ΅¬μ‘°μ²΄ μ¬λ¬ λΆλΆμ ν¨λ©μ΄ μΆκ°λ¨. stat64-
st_inoνλκ° λ 컀μ§κ³ , 리λ μ€ 2.4μμ UID λ° GIDλ₯Ό 32λΉνΈλ‘ νμ₯ν κ²μ λ§μΆ°st_uidλ°st_gidνλκ° μ»€μ§κ³ , μ¬λ¬ λ€λ₯Έ νλλ€μ΄ λ 컀μ§κ³ ꡬ쑰체μ ν¨λ©λ€μ΄ μΆκ°λ¨. (리λ μ€ 2.6μμ 32λΉνΈ μ₯μΉ IDμ νμμ€ν¬ν λλ Έμ΄ λΆλΆμ΄ λ±μ₯νλ©΄μ μ¬λ¬ ν¨λ© λ°μ΄νΈκ° μ¬λΌμ‘λ€.)
glibcμ stat() λνΌ ν¨μμμ μ΄λ° μΈλΆ μ¬νμ μμ©μκ² κ°μΆ° μ£Όκ³ μ»€λμ΄ μ 곡νλ κ°μ₯ μ΅μ λ²μ μ μμ€ν
νΈμΆμ λΆλ₯΄λ©° ꡬμ λ°μ΄λ리λ₯Ό μν΄ νμν κ²½μ° λ°νλ μ 보λ₯Ό λ€μ ν¬μ₯ν΄ μ€λ€.
μ΅μ 64λΉνΈ μμ€ν
μμλ κ°λ¨νλ€. stat() μμ€ν
νΈμΆμ΄ νλλ§ μκ³ μ»€λμμλ νλ ν¬κΈ°κ° μΆ©λΆν ν° stat ꡬ쑰체λ₯Ό μ¬μ©νλ€.
glibcμ fstatat() λνΌ ν¨μμμ μ΄μ©νλ κΈ°λ° μμ€ν
νΈμΆμ μ€μ μ΄λ¦μ΄ fstatat64()μ΄κ³ μΌλΆ μν€ν
μ²μμλ newfstatat()μ΄λ€.
λ€μ νλ‘κ·Έλ¨μμλ lstat()μ νΈμΆν΄μ λ°νλ stat ꡬ쑰체μ μ£Όμ νλλ€μ νμνλ€.
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/sysmacros.h>
int
main(int argc, char *argv[])
{
struct stat sb;
if (argc != 2) {
fprintf(stderr, "Usage: %s <pathname>\n", argv[0]);
exit(EXIT_FAILURE);
}
if (lstat(argv[1], &sb) == -1) {
perror("lstat");
exit(EXIT_FAILURE);
}
printf("ID of containing device: [%lx,%lx]\n",
(long) major(sb.st_dev), (long) minor(sb.st_dev));
printf("File type: ");
switch (sb.st_mode & S_IFMT) {
case S_IFBLK: printf("block device\n"); break;
case S_IFCHR: printf("character device\n"); break;
case S_IFDIR: printf("directory\n"); break;
case S_IFIFO: printf("FIFO/pipe\n"); break;
case S_IFLNK: printf("symlink\n"); break;
case S_IFREG: printf("regular file\n"); break;
case S_IFSOCK: printf("socket\n"); break;
default: printf("unknown?\n"); break;
}
printf("I-node number: %ld\n", (long) sb.st_ino);
printf("Mode: %lo (octal)\n",
(unsigned long) sb.st_mode);
printf("Link count: %ld\n", (long) sb.st_nlink);
printf("Ownership: UID=%ld GID=%ld\n",
(long) sb.st_uid, (long) sb.st_gid);
printf("Preferred I/O block size: %ld bytes\n",
(long) sb.st_blksize);
printf("File size: %lld bytes\n",
(long long) sb.st_size);
printf("Blocks allocated: %lld\n",
(long long) sb.st_blocks);
printf("Last status change: %s", ctime(&sb.st_ctime));
printf("Last file access: %s", ctime(&sb.st_atime));
printf("Last file modification: %s", ctime(&sb.st_mtime));
exit(EXIT_SUCCESS);
}ls(1), stat(1), access(2), chmod(2), chown(2), readlink(2), statx(2), utime(2), capabilities(7), inode(7), symlink(7)
2019-03-06