utimensat(2) - wariua/manpages-ko GitHub Wiki
utimensat, futimens - λλ Έμ΄ μ λ°λλ‘ νμΌ νμμ€ν¬ν λ°κΎΈκΈ°
#include <fcntl.h> /* AT_* μμ μ μ */
#include <sys/stat.h>
int utimensat(int dirfd, const char *pathname,
const struct timespec times[2], int flags);
int futimens(int fd, const struct timespec times[2]);
glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
utimensat()
: -
- glibc 2.10λΆν°:
_POSIX_C_SOURCE >= 200809L
- glibc 2.10 μ :
_ATFILE_SOURCE
-
futimens()
: -
- glibc 2.10λΆν°:
_POSIX_C_SOURCE >= 200809L
- glibc 2.10 μ :
_GNU_SOURCE
utimensat()
κ³Ό futimens()
λ λλ
Έμ΄ μ λ°λλ‘ νμΌμ νμμ€ν¬νλ₯Ό κ°±μ νλ€. μ΄μ λλΉλλ κ²μ΄ κ³Όκ±°μ utime(2)κ³Ό utimes(2)μΈλ°, νμΌ νμμ€ν¬νλ₯Ό μ€μ ν λ κ°κ° μ΄ λ¨μ μ λ°λμ λ§μ΄ν¬λ‘μ΄ μ λ°λλ§ νμ©νλ€.
utimensat()
μμλ pathname
μΌλ‘ μ£Όλ κ²½λ‘λͺ
μ ν΅ν΄ νμΌμ μ§μ νλ€. futimens()
μμλ μ΄λ € μλ νμΌ λμ€ν¬λ¦½ν° fd
λ₯Ό ν΅ν΄ νμμ€ν¬νλ₯Ό κ°±μ ν νμΌμ μ§μ νλ€.
λ νΈμΆ λͺ¨λμμ λ°°μ΄ times
λ‘ μ νμΌ νμμ€ν¬νλ₯Ό μ§μ νλ€. times[0]
μ μλ‘μ΄ "μ΅κ·Ό μ κ·Ό μκ°"(atime
)μ λνλ΄κ³ times[1]
μ μλ‘μ΄ "μ΅κ·Ό μμ μκ°"(mtime
)μ λνλ΄λ€. times
μ κ° νλͺ©μ μν¬ν¬, μ¦ 1970-01-01 00:00:00 +0000 (UTC) νλ‘ μ§λ μ΄μ λλ
Έμ΄ μλ‘ μκ°μ λνλ΄λ€. μ΄ μ 보λ₯Ό λ€μ νμμ κ΅¬μ‘°μ²΄λ‘ μ λ¬νλ€.
struct timespec {
time_t tv_sec; /* μ΄ */
long tv_nsec; /* λλ
Έμ΄ */
};
κ°±μ λλ νμΌ νμμ€ν¬νλ νμΌ μμ€ν μμ μ§μνλ μ§μ ν μκ°λ³΄λ€ ν¬μ§ μμ κ°μ₯ ν° κ°μΌλ‘ μ€μ λλ€.
timespec
ꡬ쑰체μ tv_nsec
νλκ° νΉμν κ° UTIME_NOW
μ΄λ©΄ λμνλ νμΌ νμμ€ν¬νλ₯Ό νμ¬ μκ°μΌλ‘ μ€μ νλ€. timespec
ꡬ쑰체μ tv_nsec
νλκ° νΉμν κ° UTIME_OMIT
μ΄λ©΄ λμνλ νμΌ νμμ€ν¬νλ₯Ό λ°κΎΈμ§ μκ³ λλλ€. λ κ²½μ° λͺ¨λμμ λμνλ tv_sec
νλμ κ°μ 무μνλ€.
times
κ° NULLμ΄λ©΄ λ νμμ€ν¬ν λͺ¨λλ₯Ό νμ¬ μκ°μΌλ‘ μ€μ νλ€.
λ νμΌ νμμ€ν¬ν λͺ¨λλ₯Ό νμ¬ μκ°μΌλ‘ μ€μ νλ €λ©΄ (μ¦ times
κ° NULLμ΄κ±°λ λ tv_nsec
νλ λͺ¨λ UTIME_NOW
μ§μ ) λ€μ μ€ νλμ¬μΌ νλ€.
- νΈμΆμκ° κ·Έ νμΌμ μ°κΈ° μ κ·ΌκΆμ κ°μ§κ³ μμ΄μΌ νλ€.
- νΈμΆμμ μ€ν¨ μ¬μ©μ IDκ° νμΌ μμ μμ μΌμΉν΄μΌ νλ€.
- νΈμΆμκ° μ μ ν νΉκΆμ κ°μ§κ³ μμ΄μΌ νλ€.
λ νμμ€ν¬ν λͺ¨λλ₯Ό νμ¬ μκ°μΌλ‘ μ€μ νλ κ² μΈμ μ΄λ€ λ³κ²½μ νλ €λ©΄ (μ¦ times
κ° NULLμ΄ μλκ³ tv_nsec
νλ νλλΌλ UTIME_NOW
μ΄λ UTIME_OMIT
κ° μλ) μμ 쑰건 2λ²κ³Ό 3λ² μ€ νλκ° ν΄λΉλμ΄μΌ νλ€.
λ tv_nsec
νλκ° λͺ¨λ UTIME_OMIT
μΌλ‘ μ§μ λμ΄ μμΌλ©΄ νμΌ μμ κΆ κ²μ¬λ κΆν κ²μ¬λ₯Ό μννμ§ μμΌλ©° νμΌ νμμ€ν¬νκ° λ³κ²½λμ§ μλλ€. νμ§λ§ κ·Έ κ²½μ°μλ λ€λ₯Έ μ€λ₯ 쑰건λ€μ νμ§ν μ μλ€.
pathname
μ΄ μλμ μΈ κ²½μ°μλ κΈ°λ³Έμ μΌλ‘ (utimes(2)μμ νλ― νΈμΆ νλ‘μΈμ€μ νμ¬ μμ
λλ ν°λ¦¬ κΈ°μ€μ΄ μλλΌ) μ΄λ¦° νμΌ λμ€ν¬λ¦½ν° dirfd
κ° κ°λ¦¬ν€λ λλ ν°λ¦¬λ₯Ό κΈ°μ€μΌλ‘ ν΄μνλ€. μ΄κ²μ΄ μ μ©ν μ μλ μ΄μ μ λν μ€λͺ
μ openat(2)μ 보λΌ.
pathname
μ΄ μλμ μ΄κ³ dirfd
κ° νΉμν κ° AT_FDCWD
μΈ κ²½μ°μλ (utimes(2)μ²λΌ) νΈμΆ νλ‘μΈμ€μ νμ¬ μμ
λλ ν°λ¦¬λ₯Ό κΈ°μ€μΌλ‘ pathname
μ ν΄μνλ€.
pathname
μ΄ μ λμ μΈ κ²½μ°μλ dirfd
λ₯Ό 무μνλ€.
flags
νλλ λΉνΈ λ§μ€ν¬μ΄λ€. 0μΌ μλ μκ³ <fcntl.h>
μ μ μλ λ€μ μμλ₯Ό ν¬ν¨ν μλ μλ€.
AT_SYMLINK_NOFOLLOW
-
pathname
μ΄ μ¬λ³Όλ¦ λ§ν¬λ₯Ό λνλ΄λ κ²½μ°μ κ°λ¦¬ν€λ νμΌμ΄ μλλΌ κ·Έ λ§ν¬μ νμμ€ν¬νλ₯Ό κ°±μ νλ€.
μ±κ³΅ μ utimensat()
λ° futimens()
λ 0μ λ°ννλ€. μ€λ₯ μ -1μ λ°ννλ©° μ€λ₯λ₯Ό λνλ΄λλ‘ errno
λ₯Ό μ€μ νλ€.
EACCES
-
times
κ° NULLμ΄κ±°λ λtv_nsec
κ°μ΄ λͺ¨λUTIME_NOW
μ΄λ©°, λ€μ μ€ νλμ΄λ€.-
νΈμΆμμ μ€ν¨ μ¬μ©μ IDκ° νμΌ μμ μμ μΌμΉνμ§ μμΌλ©°, νΈμΆμκ° νμΌμ μ°κΈ° μ κ·ΌκΆμ κ°μ§κ³ μμ§ μμΌλ©°, νΈμΆμμκ² νΉκΆμ΄ μλ€ (리λ μ€:
CAP_FOWNER
μλ₯μ΄λCAP_DAC_OVERRIDE
μλ₯μ κ°μ§κ³ μμ§ μλ€). -
νμΌμ΄ λΆλ³μΌλ‘ νμλμ΄ μλ€. (chattr(1) μ°Έκ³ )
-
EBADF
- (
futimens()
)fd
κ° μ ν¨ν νμΌ λμ€ν¬λ¦½ν°κ° μλλ€. EBADF
- (
utimensat()
)pathname
μ΄ μλ κ²½λ‘λͺ μΈλ°dirfd
κ°AT_FDCWD
λ μλκ³ μ ν¨ν νμΌ λμ€ν¬λ¦½ν°λ μλλ€. EFAULT
-
times
κ° μ ν¨νμ§ μμ μ£Όμλ₯Ό κ°λ¦¬ν¨λ€. λλdirfd
κ°AT_FDCWD
μλλ°pathname
μ΄ NULLμ΄κ±°λ μ ν¨νμ§ μμ μ£Όμμ΄λ€. EINVAL
-
flags
μ μ ν¨νμ§ μμ κ°. EINVAL
- ν
tv_nsec
νλμ μ ν¨νμ§ μμ κ° (0μμ 999,999,999κΉμ§ λ²μ λ°μ κ°μ΄κ³UTIME_NOW
λUTIME_OMIT
μ΄ μλ). λλ νtv_sec
νλμ μ ν¨νμ§ μμ κ°. EINVAL
-
pathname
μ΄ NULLμ΄κ³ ,dirfd
κ°AT_FDCWD
κ° μλκ³ ,flags
κ°AT_SYMLINK_NOFOLLOW
λ₯Ό λ΄κ³ μλ€. ELOOP
- (
utimensat()
)pathname
μ ν΄μνλ λμ λ무 λ§μ μ¬λ³Όλ¦ λ§ν¬λ₯Ό λ§λ¬λ€. ENAMETOOLONG
- (
utimensat()
)pathname
μ΄ λ무 κΈΈλ€. ENOENT
- (
utimensat()
)pathname
μ μ΄λ μμκ° μ‘΄μ¬νλ λλ ν°λ¦¬λ νμΌμ κ°λ¦¬ν€μ§ μκ±°λ,pathname
μ΄ λΉ λ¬Έμμ΄μ΄λ€. ENOTDIR
- (
utimensat()
)pathname
μ΄ μλ κ²½λ‘μΈλ°dirfd
κ°AT_FDCWD
λ μλκ³ λλ ν°λ¦¬λ₯Ό κ°λ¦¬ν€λ νμΌ λμ€ν¬λ¦½ν°λ μλλ€. λλpathname
μ ν μ λ μμκ° λλ ν°λ¦¬κ° μλλ€. EPERM
-
νΈμΆμκ° νμμ€ν¬νλ€ μ€ νλ λλ λͺ¨λλ₯Ό νμ¬ μκ° μλ κ°μΌλ‘ λ°κΎΈλ € νκ±°λ, νμμ€ν¬ν νλλ₯Ό νμ¬ μκ°μΌλ‘ λ°κΎΈκ³ λλ¨Έμ§ νμμ€ν¬νλ κ·Έλλ‘ λλ € νμΌλ©°, λ€μ μ€ νλμ΄λ€.
-
νΈμΆμμ μ€ν¨ μ¬μ©μ IDκ° νμΌ μμ μμ μΌμΉνμ§ μμΌλ©°, νΈμΆμμκ² νΉκΆμ΄ μλ€ (리λ μ€:
CAP_FOWNER
μλ₯μ κ°μ§κ³ μμ§ μλ€). -
νμΌμ΄ λ§λΆμ μ μ©μ΄λ λΆλ³μΌλ‘ νμλμ΄ μλ€. (chattr(1) μ°Έκ³ )
-
EROFS
- νμΌμ΄ μ½κΈ° μ μ© νμΌ μμ€ν μμ μλ€.
ESRCH
- (
utimensat()
)pathname
μ ν μ λ μμμ λν΄ νμ κΆνμ΄ κ±°λΆλμλ€.
리λ
μ€ μ»€λ 2.6.22μμ utimensat()
μ΄ μΆκ°λμλ€. glibc λ²μ 2.6μμ μ§μμ΄ μΆκ°λμλ€.
glibc 2.6μμ futimens()
μ§μμ΄ μ²μ λ±μ₯νλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
μΈν°νμ΄μ€ | μμ± | κ° |
---|---|---|
utimensat() , futimens()
|
μ€λ λ μμ μ± | MT-Safe |
futimens()
μ utimensat()
μ POSIX.1-2008μ λͺ
μΈλμ΄ μλ€.
utimensat()
μ futimesat(2)μ ꡬμννλ€.
리λ μ€μμλ λΆλ³(immutable)μΌλ‘ νμλ νμΌμ νμμ€ν¬νλ₯Ό λ°κΏ μ μμΌλ©° λ§λΆμ μ μ©(append-only)μΌλ‘ νμλ νμΌμ μ μΌνκ² νμ©λλ λ³κ²½μ νμμ€ν¬νλ₯Ό νμ¬ μκ°μΌλ‘ μ€μ νλ κ²μ΄λ€. (μ΄λ 리λ μ€μμ utime(2)κ³Ό utimes(2)μ μμ¬μ λμ λ°©μκ³Ό μΌμΉνλ€.)
λ tv_nsec
νλκ° λͺ¨λ UTIME_OMIT
μΌλ‘ μ§μ λμ΄ μλ κ²½μ° λ¦¬λ
μ€μ utimensat()
ꡬνμ dirfd
μ pathname
μ΄ κ°λ¦¬ν€λ νμΌμ΄ μ‘΄μ¬νμ§ μμλ μ±κ³΅νλ€.
리λ
μ€μμ futimens()
λ utimensat()
μμ€ν
νΈμΆ μμμ ꡬνν λΌμ΄λΈλ¬λ¦¬ ν¨μμ΄λ€. μ΄λ₯Ό μ§μνκΈ° μν΄ λ¦¬λ
μ€μ utimensat()
μμ€ν
νΈμΆμμλ λΉνμ€ κΈ°λ₯μ ν κ°μ§ ꡬννκ³ μλ€. pathname
μ΄ NULLμ΄λ©΄ νΈμΆμμ (μ΄λ€ μ’
λ₯μ νμΌλ κ°λ¦¬ν¬ μ μλ) νμΌ λμ€ν¬λ¦½ν° dirfd
κ° κ°λ¦¬ν€λ νμΌμ νμμ€ν¬νλ₯Ό μμ νλ€. μ΄ κΈ°λ₯μ μ΄μ©νμ¬ futimens(fd, times)
νΈμΆμ λ€μκ³Ό κ°μ΄ ꡬννλ€.
utimensat(fd, NULL, times, 0);
μ°Έκ³ λ‘ glibcμ utimensat()
μμλ pathname
κ°μΌλ‘ NULLμ μ£Όλ κ²μ νμ©νμ§ μλλ€. μ΄ κ²½μ° λνΌ ν¨μκ° μ€λ₯ EINVAL
μ λ°ννλ€.
2.6.26 μ μ 컀λλ€μλ utimensat()
κ³Ό futimens()
μ μ¬λ¬ λ²κ·Έλ€μ΄ μλ€. μ΄ λ²κ·Έλ€μ POSIX.1 μ΄μ λͺ
μΈμμ λΆμΌμΉμ΄κ±°λ 리λ
μ€μ μμ¬μ λμ λ°©μκ³Όμ λΆμΌμΉμ΄λ€.
-
POSIX.1μμλ ν
tv_nsec
νλμ κ°μ΄UTIME_NOW
λUTIME_OMIT
μ΄λ©΄ λμνλtv_sec
νλλ₯Ό 무μν΄μΌ νλ€κ³ λͺ μΈνλ€. κ·Έλ°λ°tv_sec
νλμ κ°μ΄ 0μ΄κΈ°λ₯Ό μꡬνλ€. (μλλ©΄EINVAL
μ€λ₯ λ°μ.) -
λ€μν λ²κ·Έλ€μ΄ μλ―Ένλ λ°λ κΆν κ²μ¬μ μμ΄μ λ
tv_nsec
νλκ° λͺ¨λUTIME_NOW
λ‘ μ€μ λ κ²½μ°λ₯Ό νμtimes
λ₯Ό NULLλ‘ μ§μ ν κ²κ³Ό κ°κ² λ€λ£¨μ§λ μλλ€λ κ², κ·Έλ¦¬κ³ νtv_nsec
κ°μ΄UTIME_NOW
μ΄κ³ λ€λ₯Έ κ°μ΄UTIME_OMIT
μΈ κ²½μ°λ₯Όtimes
λ₯Ό μμ μκ° κ°λ€μ λ΄μ ꡬ쑰체 λ°°μ΄μ λν ν¬μΈν°λ‘ μ§μ ν κ²κ³Ό κ°κ² λ€λ£¨μ§ μλλ€λ κ²μ΄λ€. λ²κ·Έλ€ λλ¬Έμ μΌλΆ κ²½μ°μμ a) κ°±μ μ μνν κΆνμ΄ μμ΄μΌ νλ νλ‘μΈμ€κ° νμΌ νμμ€ν¬νλ₯Ό κ°±μ ν μ μκ³ , b) κ°±μ μ μνν κΆνμ΄ μμ΄μΌ νλ νλ‘μΈμ€κ° νμΌ νμμ€ν¬νλ₯Ό κ°±μ ν μ μκ³ , c) μ€λ₯ κ²½μ°μ νλ¦°errno
κ°μ λ°ννλ€. -
POSIX.1μμλ λ κ°μ§ νμμ€ν¬νλ₯Ό λͺ¨λ νμ¬ μκ°μΌλ‘ κ°±μ νκΈ° μν΄ νμΌμ λν μ°κΈ° μ κ·ΌκΆμ κ°μ§ νλ‘μΈμ€κ°
times
λ₯Ό NULLλ‘ ν΄μ, λλtimes
κ° λtv_nsec
νλκ° λͺ¨λUTIME_NOW
μΈ κ΅¬μ‘°μ²΄ λ°°μ΄μ κ°λ¦¬ν€κ² ν΄μ νΈμΆμ ν μ μλ€κ³ νλ€. νμ§λ§futimens()
μμ κ·Έ λμ νμΌ λμ€ν¬λ¦½ν°μ μ κ·Ό λͺ¨λμμ μ°κΈ°λ₯Ό νμ©νλμ§ μ¬λΆλ₯Ό νμΈνλ€.
chattr(1), touch(1)
, futimesat(2), openat(2), stat(2), utimes(2), futimes(3)
, inode(7), path_resolution(7), symlink(7)
2017-09-15