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

NAME

gettimeofday, settimeofday - μ‹œκ°„ μ–»κΈ°/μ„€μ •ν•˜κΈ°

SYNOPSIS

#include <sys/time.h>

int gettimeofday(struct timeval *tv, struct timezone *tz);

int settimeofday(const struct timeval *tv, const struct timezone *tz);

glibc κΈ°λŠ₯ 확인 맀크둜 μš”κ±΄ (feature_test_macros(7) μ°Έκ³ ):

settimeofday():
glibc 2.19λΆ€ν„°:
_DEFAULT_SOURCE
glibc 2.19 및 이전:
_BSD_SOURCE

DESCRIPTION

gettimeofday() 및 settimeofday() ν•¨μˆ˜λŠ” μ‹œκ°„μ— λ”ν•΄μ„œ μ‹œκ°„λŒ€λ₯Ό μ–»κ±°λ‚˜ μ„€μ •ν•  수 μžˆλ‹€. tv μΈμžλŠ” (<sys/time.h>에 μžˆλŠ”) struct timeval이며,

struct timeval {
    time_t      tv_sec;     /* 초 */
    suseconds_t tv_usec;    /* 마이크둜초 */
};

에포크(time(2) μ°Έκ³ ) μ΄ν›„μ˜ 초 및 마이크둜초 수λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. tz μΈμžλŠ” struct timezone이닀.

struct timezone {
    int tz_minuteswest;     /* κ·Έλ¦¬λ‹ˆμΉ˜ μ„œμͺ½μœΌλ‘œ λͺ‡ λΆ„ */
    int tz_dsttime;         /* DST μˆ˜μ • μ’…λ₯˜ */
};

tvλ‚˜ tz 쀑 μ–΄λŠ μͺ½μ΄λΌλ„ NULL이면 ν•΄λ‹Ή ꡬ쑰체λ₯Ό μ„€μ • λ‚΄μ§€ λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€. (ν•˜μ§€λ§Œ tvκ°€ NULL이면 컴파일 κ²½κ³ κ°€ λ‚˜κ²Œ λœλ‹€.)

timezone ꡬ쑰체 μ‚¬μš©μ€ κ΅¬μ‹ν™”λ˜μ—ˆλ‹€. 보톡은 tz 인자λ₯Ό NULL둜 μ§€μ •ν•˜λŠ” 게 μ’‹λ‹€. (μ•„λž˜ NOTES μ°Έκ³ .)

λ¦¬λˆ…μŠ€μ—λŠ” settimeofday() μ‹œμŠ€ν…œ 호좜과 κ΄€λ ¨ν•΄ μ’€ λ…νŠΉν•œ "클럭 μ™œκ³‘" λ™μž‘ 방식이 μžˆλ‹€. (λΆ€νŒ… ν›„) 졜초 ν˜ΈμΆœμ—μ„œ tz μΈμžκ°€ NULL이 μ•„λ‹ˆκ³  tz μΈμžκ°€ NULLμ΄λ©΄μ„œ tz_minuteswest ν•„λ“œκ°€ 0이 아닐 λ•Œμ˜ λ™μž‘μ΄λ‹€. (μ΄λ•Œ tz_dsttime은 0으둜 ν•˜λŠ” 게 μ’‹λ‹€.) 이런 κ²½μš°μ—λŠ” CMOS 클럭이 μ§€μ—­ μ‹œκ°„μ΄κ³ , 거기에 그만큼 μ‹œκ°„μ„ 더해야 UTC μ‹œμŠ€ν…œ μ‹œκ°„μ„ 얻을 수 μžˆλ‹€κ³  μΉœλ‹€. 이 κΈ°λŠ₯을 μ“°μ§€ μ•ŠλŠ” 게 μ’‹λ‹€λŠ” λ°λŠ” 두말할 λ‚˜μœ„κ°€ μ—†λ‹€.

RETURN VALUE

gettimeofday()와 settimeofday()λŠ” 성곡 μ‹œ 0을 λ°˜ν™˜ν•˜κ³  μ‹€νŒ¨ μ‹œ -1을 λ°˜ν™˜ν•œλ‹€. (μ‹€νŒ¨ μ‹œ errno을 적절히 μ„€μ •ν•œλ‹€.)

ERRORS

EFAULT
tvλ‚˜ tz 쀑 ν•˜λ‚˜κ°€ μ ‘κ·Ό κ°€λŠ₯ μ£Όμ†Œ 곡간 밖을 가리킨닀.
EINVAL
(settimeofday()): timezone이 μœ νš¨ν•˜μ§€ μ•Šλ‹€.
EINVAL
(settimeofday()): tv.tv_sec이 μŒμˆ˜κ±°λ‚˜ tv.tv_usec이 [0..999,999] λ²”μœ„ 밖이닀.
EINVAL (λ¦¬λˆ…μŠ€ 4.3λΆ€ν„°)
(settimeofday()): μ‹œκ°„μ„ CLOCK_MONOTONIC 클럭의 ν˜„μž¬ 값보닀 μž‘μ€ κ°’μœΌλ‘œ μ„€μ •ν•˜λ € ν–ˆλ‹€. (clock_gettime(2) μ°Έκ³ .)
EPERM
호좜 ν”„λ‘œμ„ΈμŠ€μ—κ²Œ settimeofday() ν˜ΈμΆœμ„ μœ„ν•œ μΆ©λΆ„ν•œ 특ꢌ이 μ—†λ‹€. λ¦¬λˆ…μŠ€μ—μ„œλŠ” CAP_SYS_TIME μ—­λŠ₯이 ν•„μš”ν•˜λ‹€.

CONFORMING TO

SVr4, 4.3BSD. POSIX.1-2001μ—μ„œλŠ” gettimeofday()λŠ” κΈ°μˆ ν•˜μ§€λ§Œ settimeofday()λŠ” κΈ°μˆ ν•˜κ³  μžˆμ§€ μ•Šλ‹€. POSIX.1-2008μ—μ„œλŠ” gettimeofday()λ₯Ό κ΅¬μ‹μœΌλ‘œ ν‘œμ‹œν•˜κ³  있으며 λŒ€μ‹  clock_gettime(2) μ‚¬μš©μ„ ꢌμž₯ν•œλ‹€.

NOTES

gettimeofday()κ°€ λ°˜ν™˜ν•˜λŠ” μ‹œκ°„μ€ (μ‹œμŠ€ν…œ κ΄€λ¦¬μžκ°€ μ‹œμŠ€ν…œ μ‹œκ°„μ„ μˆ˜λ™μœΌλ‘œ λ°”κΎΈλŠ” 경우 같은) λΆˆμ—°μ†μ  μ‹œμŠ€ν…œ μ‹œκ°„ λ„μ•½μ˜ 영ν–₯을 λ°›λŠ”λ‹€. 단쑰 μ¦κ°€ν•˜λŠ” 클럭이 ν•„μš”ν•˜λ‹€λ©΄ clock_gettime(2)을 보라.

timeval ꡬ쑰체λ₯Ό 닀루기 μœ„ν•œ λ§€ν¬λ‘œλ“€μ„ timeradd(3)μ—μ„œ μ„€λͺ…ν•œλ‹€.

μ „ν†΅μ μœΌλ‘œ struct timeval의 ν•„λ“œλ“€μ€ long νƒ€μž…μ΄μ—ˆλ‹€.

C 라이브러리/컀널 차이

일뢀 μ•„ν‚€ν…μ²˜μ—μ„œλŠ” vdso(7)μ—μ„œ gettimeofday() κ΅¬ν˜„μ„ μ œκ³΅ν•œλ‹€.

tz_dsttime ν•„λ“œ

λ¦¬λˆ…μŠ€ μ•„λ‹Œ 컀널 μƒμ—μ„œ glibcλ₯Ό μ“°λŠ” κ²½μš°μ—λŠ” ν˜„μž¬ μ‹œκ°„λŒ€μ—μ„œ ν•œ λ²ˆμ΄λΌλ„ 일광 μ ˆμ•½ κ·œμΉ™μ„ μ μš©ν•œ 적이 μžˆκ±°λ‚˜ μ μš©ν•  μ˜ˆμ •μ΄λ©΄ gettimeofday()μ—μ„œ struct timezone의 tz_dsttime ν•„λ“œλ₯Ό 0 μ•„λ‹Œ κ°’μœΌλ‘œ μ„€μ •ν•˜κ²Œ λœλ‹€. 즉 ν˜„μž¬ μ‹œκ°„λŒ€μ— λŒ€ν•΄ daylight(3)의 의미λ₯Ό μ •ν™•νžˆ λ°˜μ˜ν•œλ‹€. λ¦¬λˆ…μŠ€ μƒμ—μ„œ glibcλ₯Ό μ“°λŠ” κ²½μš°μ—λŠ” settimeofday()λ‚˜ gettimeofday()μ—μ„œ struct timezone의 tz_dsttime ν•„λ“œ 섀정을 μ΄μš©ν•œ 적이 ν•œ λ²ˆλ„ μ—†λ‹€. λ”°λΌμ„œ λ‹€μŒ λ‚΄μš©μ€ μˆœμˆ˜ν•˜κ²Œ 역사적 관심사일 뿐이닀.

였래된 μ‹œμŠ€ν…œλ“€μ—μ„œ tz_dsttime ν•„λ“œμ—λŠ” κ·Έ ν•΄ μ–΄λŠ μ‹œκΈ°μ— 일광 μ ˆμ•½ μ‹œκ°„μ΄ μ‹œν–‰λ˜λŠ”μ§€ λ‚˜νƒ€λ‚΄λŠ” 심볼 μƒμˆ˜(μ•„λž˜μ— 값듀이 있음)κ°€ λ‹΄κΈ΄λ‹€. (μ°Έκ³ : 이 값은 ν•œν•΄ λ‚΄λ‚΄ 고정돼 μžˆλ‹€. 즉 DSTκ°€ μ‹œν–‰ μ€‘μž„μ„ λ‚˜νƒ€λ‚΄λŠ” 게 μ•„λ‹ˆλΌ μ•Œκ³ λ¦¬μ¦˜μ„ μ„ μ •ν•  뿐이닀.) λ‹€μŒ 일광 μ ˆμ•½ μ‹œκ°„ μ•Œκ³ λ¦¬μ¦˜λ“€μ΄ μ •μ˜λΌ μžˆλ‹€.

DST_NONE     /* DST λΉ„μ‹œν–‰ */
DST_USA      /* λ―Έκ΅­ 방식 DST */
DST_AUST     /* μ˜€μŠ€νŠΈλ ˆμΌλ¦¬μ•„ 방식 DST */
DST_WET      /* μ„œμœ λŸ½ DST */
DST_MET      /* μ€‘μœ λŸ½ DST */
DST_EET      /* λ™μœ λŸ½ DST */
DST_CAN      /* μΊλ‚˜λ‹€ */
DST_GB       /* 영ꡭ */
DST_RUM      /* λ£¨λ§ˆλ‹ˆμ•„ */
DST_TUR      /* ν„°ν‚€ */
DST_AUSTALT  /* μ˜€μŠ€νŠΈλ ˆμΌλ¦¬μ•„ 1986λ…„ λ³€κ²½ 방식 */

λ‹Ήμ—°ν•˜κ²Œλ„ 일광 μ ˆμ•½ μ‹œκ°„ μ‹œν–‰ μ‹œκΈ°λ₯Ό λ‚˜λΌλ§ˆλ‹€ ν•˜λ‚˜μ”©μ˜ λ‹¨μˆœν•œ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ λ‚˜νƒ€λ‚Ό μˆ˜λŠ” μ—†λ‹€λŠ” 게 λ“œλŸ¬λ‚¬λ‹€. μ‹€μ œλ‘œ κ·Έ μ‹œκΈ°λŠ” 예츑 λΆˆκ°€λŠ₯ν•œ μ •μΉ˜μ  νŒλ‹¨μ— 따라 μ •ν•΄μ§„λ‹€. κ·Έλž˜μ„œ μ΄λ ‡κ²Œ μ‹œκ°„λŒ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 방식은 λ²„λ €μ‘Œλ‹€.

SEE ALSO

date(1), adjtimex(2), clock_gettime(2), time(2), ctime(3), ftime(3), timeradd(3), capabilities(7), time(7), vdso(7), hwclock(8)


2019-03-06

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