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