utimensat(2) - wariua/manpages-ko GitHub Wiki

NAME

utimensat, futimens - λ‚˜λ…Έμ΄ˆ μ •λ°€λ„λ‘œ 파일 νƒ€μž„μŠ€νƒ¬ν”„ λ°”κΎΈκΈ°

SYNOPSIS

#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

DESCRIPTION

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 μ§€μ •) λ‹€μŒ 쀑 ν•˜λ‚˜μ—¬μ•Ό ν•œλ‹€.

  1. ν˜ΈμΆœμžκ°€ κ·Έ νŒŒμΌμ— μ“°κΈ° μ ‘κ·ΌκΆŒμ„ κ°€μ§€κ³  μžˆμ–΄μ•Ό ν•œλ‹€.
  2. 호좜자의 μ‹€νš¨ μ‚¬μš©μž IDκ°€ 파일 μ†Œμœ μžμ™€ μΌμΉ˜ν•΄μ•Ό ν•œλ‹€.
  3. ν˜ΈμΆœμžκ°€ μ μ ˆν•œ νŠΉκΆŒμ„ κ°€μ§€κ³  μžˆμ–΄μ•Ό ν•œλ‹€.

두 νƒ€μž„μŠ€νƒ¬ν”„ λͺ¨λ‘λ₯Ό ν˜„μž¬ μ‹œκ°„μœΌλ‘œ μ„€μ •ν•˜λŠ” 것 μ™Έμ˜ μ–΄λ–€ 변경을 ν•˜λ €λ©΄ (즉 timesκ°€ NULL이 μ•„λ‹ˆκ³  tv_nsec ν•„λ“œ ν•˜λ‚˜λΌλ„ UTIME_NOWμ΄λ‚˜ UTIME_OMITκ°€ μ•„λ‹˜) μœ„μ˜ 쑰건 2번과 3번 쀑 ν•˜λ‚˜κ°€ ν•΄λ‹Ήλ˜μ–΄μ•Ό ν•œλ‹€.

두 tv_nsec ν•„λ“œκ°€ λͺ¨λ‘ UTIME_OMIT으둜 μ§€μ •λ˜μ–΄ 있으면 파일 μ†Œμœ κΆŒ κ²€μ‚¬λ‚˜ κΆŒν•œ 검사λ₯Ό μˆ˜ν–‰ν•˜μ§€ μ•ŠμœΌλ©° 파일 νƒ€μž„μŠ€νƒ¬ν”„κ°€ λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ κ·Έ κ²½μš°μ—λ„ λ‹€λ₯Έ 였λ₯˜ 쑰건듀을 탐지할 수 μžˆλ‹€.

utimensat() ν•œμ • 사항

pathname이 μƒλŒ€μ μΈ κ²½μš°μ—λŠ” 기본적으둜 (utimes(2)μ—μ„œ ν•˜λ“― 호좜 ν”„λ‘œμ„ΈμŠ€μ˜ ν˜„μž¬ μž‘μ—… 디렉터리 기쀀이 μ•„λ‹ˆλΌ) μ—΄λ¦° 파일 λ””μŠ€ν¬λ¦½ν„° dirfdκ°€ κ°€λ¦¬ν‚€λŠ” 디렉터리λ₯Ό κΈ°μ€€μœΌλ‘œ ν•΄μ„ν•œλ‹€. 이것이 μœ μš©ν•  수 μžˆλŠ” μ΄μœ μ— λŒ€ν•œ μ„€λͺ…은 openat(2)을 보라.

pathname이 μƒλŒ€μ μ΄κ³  dirfdκ°€ νŠΉμˆ˜ν•œ κ°’ AT_FDCWD인 κ²½μš°μ—λŠ” (utimes(2)처럼) 호좜 ν”„λ‘œμ„ΈμŠ€μ˜ ν˜„μž¬ μž‘μ—… 디렉터리λ₯Ό κΈ°μ€€μœΌλ‘œ pathname을 ν•΄μ„ν•œλ‹€.

pathname이 μ ˆλŒ€μ μΈ κ²½μš°μ—λŠ” dirfdλ₯Ό λ¬΄μ‹œν•œλ‹€.

flags ν•„λ“œλŠ” λΉ„νŠΈ λ§ˆμŠ€ν¬μ΄λ‹€. 0일 μˆ˜λ„ 있고 <fcntl.h>에 μ •μ˜λœ λ‹€μŒ μƒμˆ˜λ₯Ό 포함할 μˆ˜λ„ μžˆλ‹€.

AT_SYMLINK_NOFOLLOW
pathname이 심볼릭 링크λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ²½μš°μ— κ°€λ¦¬ν‚€λŠ” 파일이 μ•„λ‹ˆλΌ κ·Έ 링크의 νƒ€μž„μŠ€νƒ¬ν”„λ₯Ό κ°±μ‹ ν•œλ‹€.

RETURN VALUE

성곡 μ‹œ utimensat() 및 futimens()λŠ” 0을 λ°˜ν™˜ν•œλ‹€. 였λ₯˜ μ‹œ -1을 λ°˜ν™˜ν•˜λ©° 였λ₯˜λ₯Ό λ‚˜νƒ€λ‚΄λ„λ‘ errnoλ₯Ό μ„€μ •ν•œλ‹€.

ERRORS

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의 ν•œ 선두 μš”μ†Œμ— λŒ€ν•΄ 탐색 κΆŒν•œμ΄ κ±°λΆ€λ˜μ—ˆλ‹€.

VERSIONS

λ¦¬λˆ…μŠ€ 컀널 2.6.22μ—μ„œ utimensat()이 μΆ”κ°€λ˜μ—ˆλ‹€. glibc 버전 2.6μ—μ„œ 지원이 μΆ”κ°€λ˜μ—ˆλ‹€.

glibc 2.6μ—μ„œ futimens() 지원이 처음 λ“±μž₯ν–ˆλ‹€.

ATTRIBUTES

이 μ ˆμ—μ„œ μ‚¬μš©ν•˜λŠ” μš©μ–΄λ“€μ— λŒ€ν•œ μ„€λͺ…은 attributes(7)λ₯Ό 보라.

μΈν„°νŽ˜μ΄μŠ€ 속성 κ°’
utimensat(), futimens() μŠ€λ ˆλ“œ μ•ˆμ „μ„± MT-Safe

CONFORMING TO

futimens()와 utimensat()은 POSIX.1-2008에 λͺ…μ„Έλ˜μ–΄ μžˆλ‹€.

NOTES

utimensat()은 futimesat(2)을 κ΅¬μ‹ν™”ν•œλ‹€.

λ¦¬λˆ…μŠ€μ—μ„œλŠ” λΆˆλ³€(immutable)으둜 ν‘œμ‹œλœ 파일의 νƒ€μž„μŠ€νƒ¬ν”„λ₯Ό λ°”κΏ€ 수 μ—†μœΌλ©° λ§λΆ™μž„ μ „μš©(append-only)으둜 ν‘œμ‹œλœ νŒŒμΌμ— μœ μΌν•˜κ²Œ ν—ˆμš©λ˜λŠ” 변경은 νƒ€μž„μŠ€νƒ¬ν”„λ₯Ό ν˜„μž¬ μ‹œκ°„μœΌλ‘œ μ„€μ •ν•˜λŠ” 것이닀. (μ΄λŠ” λ¦¬λˆ…μŠ€μ—μ„œ utime(2)κ³Ό utimes(2)의 역사적 λ™μž‘ 방식과 μΌμΉ˜ν•œλ‹€.)

두 tv_nsec ν•„λ“œκ°€ λͺ¨λ‘ UTIME_OMIT으둜 μ§€μ •λ˜μ–΄ μžˆλŠ” 경우 λ¦¬λˆ…μŠ€μ˜ utimensat() κ΅¬ν˜„μ€ dirfd와 pathname이 κ°€λ¦¬ν‚€λŠ” 파일이 μ‘΄μž¬ν•˜μ§€ μ•Šμ•„λ„ μ„±κ³΅ν•œλ‹€.

C 라이브러리/컀널 ABI 차이

λ¦¬λˆ…μŠ€μ—μ„œ futimens()λŠ” utimensat() μ‹œμŠ€ν…œ 호좜 μœ„μ—μ„œ κ΅¬ν˜„ν•œ 라이브러리 ν•¨μˆ˜μ΄λ‹€. 이λ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•΄ λ¦¬λˆ…μŠ€μ˜ utimensat() μ‹œμŠ€ν…œ ν˜ΈμΆœμ—μ„œλŠ” λΉ„ν‘œμ€€ κΈ°λŠ₯을 ν•œ κ°€μ§€ κ΅¬ν˜„ν•˜κ³  μžˆλ‹€. pathname이 NULL이면 ν˜ΈμΆœμ—μ„œ (μ–΄λ–€ μ’…λ₯˜μ˜ νŒŒμΌλ„ 가리킬 수 μžˆλŠ”) 파일 λ””μŠ€ν¬λ¦½ν„° dirfdκ°€ κ°€λ¦¬ν‚€λŠ” 파일의 νƒ€μž„μŠ€νƒ¬ν”„λ₯Ό μˆ˜μ •ν•œλ‹€. 이 κΈ°λŠ₯을 μ΄μš©ν•˜μ—¬ futimens(fd, times) ν˜ΈμΆœμ„ λ‹€μŒκ³Ό 같이 κ΅¬ν˜„ν•œλ‹€.

utimensat(fd, NULL, times, 0);

참고둜 glibc의 utimensat()μ—μ„œλŠ” pathname κ°’μœΌλ‘œ NULL을 μ£ΌλŠ” 것을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€. 이 경우 래퍼 ν•¨μˆ˜κ°€ 였λ₯˜ EINVAL을 λ°˜ν™˜ν•œλ‹€.

BUGS

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()μ—μ„œ κ·Έ λŒ€μ‹  파일 λ””μŠ€ν¬λ¦½ν„°μ˜ μ ‘κ·Ό λͺ¨λ“œμ—μ„œ μ“°κΈ°λ₯Ό ν—ˆμš©ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό ν™•μΈν•œλ‹€.

SEE ALSO

chattr(1), touch(1), futimesat(2), openat(2), stat(2), utimes(2), futimes(3), inode(7), path_resolution(7), symlink(7)


2017-09-15

⚠️ **GitHub.com Fallback** ⚠️