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