clock_getres(2) - wariua/manpages-ko GitHub Wiki
clock_getres, clock_gettime, clock_settime - ν΄λ λ° μκ° ν¨μλ€
#include <time.h>
int clock_getres(clockid_t clk_id, struct timespec *res);
int clock_gettime(clockid_t clk_id, struct timespec *tp);
int clock_settime(clockid_t clk_id, const struct timespec *tp);
-lrt
λ‘ λ§ν¬ (glibc λ²μ 2.17 μ μμλ§).
glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
clock_getres()
,clock_gettime()
,clock_settime()
: _POSIX_C_SOURCE >= 199309L
clock_getres()
ν¨μλ μ§μ ν ν΄λ clk_id
μ ν΄μλ(μ λ°λ)λ₯Ό μμλ΄κ³ , res
κ° NULLμ΄ μλλ©΄ res
κ° κ°λ¦¬ν€λ struct timespec
μ κ·Έ ν΄μλλ₯Ό μ μ₯νλ€. ν΄λμ ν΄μλλ ꡬν체μ λ°λΌ λ¬λΌμ§λ©° νΉμ νλ‘μΈμ€κ° μ€μ ν μ μλ κ²μ΄ μλλ€. clock_settime()
μ μΈμ tp
κ° κ°λ¦¬ν€λ μκ° κ°μ΄ res
μ λ°°μκ° μλλ©΄ λ°°μκ° λκ² μλΌλΈλ€.
ν¨μ clock_gettime()
λ° clock_settime()
μ μ§μ ν ν΄λ clk_id
μ μκ°μ κ°μ Έμ€κ±°λ μ€μ νλ€.
res
λ° tp
μΈμλ <time.h>
μ μλ timespec
ꡬ쑰체μ΄λ€.
struct timespec {
time_t tv_sec; /* μ΄ */
long tv_nsec; /* λλ
Έμ΄ */
};
clk_id
μΈμλ λμμ μνν ꡬ체μ ν΄λμ μλ³μμ΄λ€. ν΄λμ μμ€ν
μ μμ΄μ΄μ λͺ¨λ νλ‘μΈμ€μκ² λ³΄μΌ μλ μκ³ νλ‘μΈμ€λ³λ‘ μμ΄μ ν νλ‘μΈμ€ λ΄μμλ§ μκ°μ μΈ‘μ ν μλ μλ€.
λͺ¨λ ꡬν체λ μμ€ν
μ μ μ€μ μκ° ν΄λμ μ 곡νλ©° CLOCK_REALTIME
μΌλ‘ μ΄λ₯Ό λνλΈλ€. μ΄ ν΄λμ μκ°μ μν¬ν¬ μ΄ν μ§λ μ΄μ λλ
Έμ΄λ₯Ό λνλΈλ€. μ΄ ν΄λμ μκ°μ΄ λ°λ λ μλμ μκ°μ νμ΄λ¨Έλ μν₯μ λ°μ§ μμ§λ§ μ λμ μμ μ λν νμ΄λ¨Έλ μν₯μ λ°λλ€.
λ λ§μ ν΄λλ€μ΄ ꡬνλμ΄ μμ μ μλ€. ν΄λΉνλ μκ° κ°μ ν΄μνλ λ°©μκ³Ό νμ΄λ¨Έμ λν μν₯μ λͺ μΈλμ΄ μμ§ μλ€.
μΆ©λΆν μ΅μ μΈ glibc λ° λ¦¬λ μ€ μ»€λμμλ λ€μ ν΄λλ€μ μ§μνλ€.
CLOCK_REALTIME
- μ€μ μκ°μ (μ¦ λ²½μκ³ μκ°μ) μ¬λ μμ€ν μ μ ν΄λ. μ΄ ν΄λμ μ€μ νλ €λ©΄ μ μ ν νΉκΆμ΄ νμνλ€. μ΄ ν΄λμ μμ€ν μκ°μ λΆμ°μμ λμ½(κ°λ Ή μμ€ν κ΄λ¦¬μκ° μλμΌλ‘ ν΄λμ λ³κ²½νλ κ²½μ°)κ³Ό adjtime(3) λ° NTPκ° μννλ μ μ§μ μ‘°μ μ μν₯μ λ°λλ€.
-
CLOCK_REALTIME_COARSE
(리λ μ€ 2.6.32λΆν°. 리λ μ€ μ μ©.) -
CLOCK_REALTIME
μ λ λΉ λ₯΄μ§λ§ λ μ νν λ²μ . μμ£Ό λΉ λ₯΄λ μ λ°νμ§λ μμ νμμ€ν¬νκ° νμν λ μ°λ©΄ λλ€. μν€ν μ²λ³ μ§μμ΄ νμνλ©°, vdso(7) λ΄μμ μ΄ νλκ·Έμ λν μν€ν μ² μ§μλ νμν κ²μ΄λ€. CLOCK_MONOTONIC
-
"μ΄λ€ κ·μ λΌ μμ§ μμ μμ "(POSIXμ μμ )λΆν° λ¨μ‘° μ¦κ°νλ μκ°μ λνλ΄λ©° μ€μ ν μ μλ ν΄λ. 리λ μ€μμλ μμ€ν μ΄ λΆν νκ³ λμν μ΄ μμ ν΄λΉνλ€.
CLOCK_MONOTONIC
ν΄λμ μμ€ν μκ°μ λΆμ°μμ λμ½(κ°λ Ή μμ€ν κ΄λ¦¬μκ° μλμΌλ‘ ν΄λμ λ³κ²½νλ κ²½μ°)μλ μν₯μ λ°μ§ μμ§λ§ adjtime(3) λ° NTPκ° μννλ μ μ§μ μ‘°μ μλ μν₯μ λ°λλ€. μμ€ν μ΄ μ μ λκΈ° μνμΈ μκ°μ ν¬ν¨νμ§ μλλ€. -
CLOCK_MONOTONIC_COARSE
(리λ μ€ 2.6.32λΆν°. 리λ μ€ μ μ©.) -
CLOCK_MONOTONIC
μ λ λΉ λ₯΄μ§λ§ λ μ νν λ²μ . μμ£Ό λΉ λ₯΄λ μ λ°νμ§λ μμ νμμ€ν¬νκ° νμν λ μ°λ©΄ λλ€. μν€ν μ²λ³ μ§μμ΄ νμνλ©°, vdso(7) λ΄μμ μ΄ νλκ·Έμ λν μν€ν μ² μ§μλ νμν κ²μ΄λ€. -
CLOCK_MONOTONIC_RAW
(리λ μ€ 2.6.28λΆν°. 리λ μ€ μ μ©.) -
CLOCK_MONOTONIC
κ³Ό μ μ¬νλ NTP μ‘°μ μ΄λ adjtime(3)μ΄ μννλ μ μ§μ μ‘°μ μ μν₯μ λ°μ§ μλ νλμ¨μ΄ κΈ°λ° μκ°μ λν μ κ·Όμ μ 곡νλ€. μμ€ν μ΄ μ μ λκΈ° μνμΈ μκ°μ ν¬ν¨νμ§ μλλ€. -
CLOCK_BOOTTIME
(리λ μ€ 2.6.39λΆν°. 리λ μ€ μ μ©.) -
CLOCK_MONOTONIC
κ³Ό λμΌνλ μμ€ν μ΄ μ μ λκΈ° μνμΈ μκ°λ ν¬ν¨νλ€. settimeofday(2) λ±μ μ΄μ©ν΄ μκ°μ λ°κΎΈλ©΄ λΆμ°μμ μΌ μλ μλCLOCK_REALTIME
μ 볡μ‘ν¨μ μμ©μμ λ€λ£° νμ μμ΄ μ μ λκΈ°λ₯Ό μΈμνλ λ¨μ‘° μ¦κ° ν΄λμ μ»μ μ μλ€. -
CLOCK_PROCESS_CPUTIME_ID
(리λ μ€ 2.6.12λΆν°.) - νλ‘μΈμ€λ³ CPU μκ° ν΄λ. (νλ‘μΈμ€ λ΄ λͺ¨λ μ€λ λλ€μ΄ μλͺ¨ν CPU μκ°μ μΈ‘μ ν¨.)
-
CLOCK_THREAD_CPUTIME_ID
(리λ μ€ 2.6.12λΆν°.) - μ€λ λ νμ CPU μκ° ν΄λ.
clock_gettime()
, clock_settime()
, clock_getres()
λ μ±κ³΅ μ 0μ λ°ννκ³ μ€ν¨ μ -1μ λ°ννλ€. (κ·Έλ¦¬κ³ μ€ν¨ν κ²½μ° errno
λ₯Ό μ μ ν μ€μ νλ€.)
EFAULT
-
tp
κ° μ κ·Ό κ°λ₯ν μ£Όμ κ³΅κ° λ°μ κ°λ¦¬ν€κ³ μλ€. EINVAL
- μ§μ ν
clk_id
λ₯Ό μ΄ μμ€ν μμ μ§μνμ§ μλλ€. -
EINVAL
(리λ μ€ 4.3λΆν°) -
clk_id
λ₯ΌCLOCK_REALTIME
μΌλ‘ νclock_settime()
νΈμΆμμ μκ°μCLOCK_MONOTINIC
ν΄λ νμ¬ κ°λ³΄λ€ μμ κ°μΌλ‘ μ€μ νλ € νλ€. EPERM
-
clock_settime()
μμ νμ ν΄λμ μ€μ ν κΆνμ κ°μ§κ³ μμ§ μλ€.
리λ μ€ 2.6μμ μ΄ μμ€ν νΈμΆλ€μ΄ μ²μ λ±μ₯νλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
μΈν°νμ΄μ€ | μμ± | κ° |
---|---|---|
clock_getres() , clock_gettime() ,clock_settime()
|
μ€λ λ μμ μ± | MT-Safe |
POSIX.1-2001, POSIX.1-2008, SUSv2.
μ΄ ν¨μλ€μ΄ μ¬μ© κ°λ₯ν POSIX μμ€ν
μλ <unistd.h>
μ μ¬λ³Ό _POSIX_TIMERS
κ° 0λ³΄λ€ ν° κ°μΌλ‘ μ μλμ΄ μλ€. μ¬λ³Ό _POSIX_MONOTONIC_CLOCK
, _POSIX_CPUTIME
, _POSIX_THREAD_CPUTIME
μ CLOCK_MONOTONIC
, CLOCK_PROCESS_CPUTIME_ID
, CLOCK_THREAD_CPUTIME_ID
κ° μ¬μ© κ°λ₯ν¨μ λνλΈλ€. (sysconf(3)λ μ°Έκ³ .)
POSIX.1μμ λ€μκ³Ό κ°μ΄ λͺ μΈνκ³ μλ€.
clock_settime()
μ ν΅ν΄CLOCK_REALTIME
ν΄λμ κ°μ μ€μ νλ κ²μ΄nanosleep()
μ ν¬ν¨ν΄ μ΄ ν΄λ κΈ°λ°μ μλμ μκ° μλΉμ€λ₯Ό κΈ°λ€λ¦¬λ©° λΈλ‘ λμ΄ μλ μ€λ λλ€μ μ΄λ€ μν₯λ λΌμΉμ§ μμμΌ νλ©°, μ΄ ν΄λ κΈ°λ°μ μλμ νμ΄λ¨Έμ λ§λ£μ λν΄μλ λ§μ°¬κ°μ§μ΄λ€. λ°λΌμ μ΄λ° μκ° μλΉμ€λ€μ κ·Έ ν΄λμ μ κ· λ΄μ§ μ΄μ κ°κ³Ό μκ΄μμ΄ μμ²νλ μλμ μκ°μ΄ κ²½κ³Όνμ λμ λ§λ£λμ΄μΌ νλ€.
μΌλΆ μν€ν
μ²μμλ clock_gettime()
ꡬνμ vdso(7)λ‘ μ 곡νλ€.
리λ
μ€μ CLOCK_PROCESS_CPUTIME_ID
λ° CLOCK_THREAD_CPUTIME_ID
μ λν 컀λ μ§μμ΄ μΆκ°λκΈ° μ μ glibcμμλ μ¬λ¬ νλ«νΌλ€μμ CPUμ νμ΄λ¨Έ λ μ§μ€ν°(i386μ TSC, Itaniumμ AR.ITC)λ₯Ό μ΄μ©ν΄ μ΄ ν΄λλ€μ ꡬννλ€. μ΄λ° λ μ§μ€ν°λ€μ CPUλ§λ€ κ°μ΄ λ€λ₯Ό μλ μμΌλ©° κ·Έλ‘ μΈν΄ νλ‘μΈμ€κ° λ€λ₯Έ CPUλ‘ μ΄μ νλ κ²½μ° μ΄ ν΄λλ€μ΄ μν°λ¦¬ κ²°κ³Όλ₯Ό λ΄λμ μλ μλ€.
SMP μμ€ν
μμ CPUλ€μ΄ ν΄λ μμ²μ΄ μλ‘ λ€λ₯΄λ©΄ κ° CPUκ° μ΄μ§ λ€λ₯Έ μ§λμλ‘ λμν κ²μ΄λ―λ‘ κ·Έ νμ΄λ¨Έ λ μ§μ€ν°λ€ μ¬μ΄μ μ°κ΄μ±μ μ μ§ν λ°©λ²μ΄ μλ€. κ·Έλ° κ²½μ°μ clock_getcpuclockid(0)
μ ENOENT
λ₯Ό λ°ννμ¬ μ΄λ° μν©μ λνλΈλ€. κ·Έλ΄ λλ νλ‘μΈμ€κ° νΉμ CPUμ λ¨Έλ¬Όλ¬ μλ€κ³ νμ ν μ μλ κ²½μ°μλ§ λ ν΄λμ΄ μΈλͺ¨κ° μκ² λλ€.
SMP μμ€ν λ΄μ νλ‘μΈμλ€μ΄ λͺ¨λ μ νν κ°μ λμ μμνμ§λ μκΈ° λλ¬Έμ 보ν΅μ νμ΄λ¨Έ λ μ§μ€ν°λ€μ΄ μ°¨μ΄λ₯Ό κ°μ§κ³ λλ€. μ΄λ€ μν€ν μ²λ€μλ λΆν λ μ΄ μ°¨μ΄λ₯Ό μ ννλ €κ³ μλνλ μ½λκ° λ€μ΄μλ€. νμ§λ§ κ·Έ μ½λκ° μ°¨μ΄λ₯Ό μ ννκ² μ‘°μ νλ€κ³ 보μ₯νμ§λ λͺ»νλ€. glibcμλ (리λ μ€ μ»€λκ³Ό λ¬λ¦¬) μ΄λ° μ°¨μ΄λ₯Ό λ€λ£¨κΈ° μν μ΄λ€ λλΉμ± λ λ΄κ²¨ μμ§ μλ€. λ³΄ν΅ μ΄ μ°¨μ΄λ μκΈ° λλ¬Έμ λλΆλΆμ κ²½μ°μμλ κ·Έ ν¨κ³Όλ₯Ό 무μν μ μλ€.
glibc 2.4λΆν°λ μ΄ νμ΄μ§μμ κΈ°μ νλ μμ€ν
νΈμΆλ€μ λν λνΌ ν¨μλ€μ΄ CLOCK_PROCESS_CPUTIME_ID
λ° CLOCK_THREAD_CPUTIME_ID
μ 컀λ ꡬνμ μ 곡νλ μμ€ν
(μ¦ λ¦¬λ
μ€ 2.6.12 λ° μ΄ν)μμλ κ·Έ ꡬνμ μ¬μ©νμ¬ μμ μΈκΈν λ¬Έμ λ€μ νΌνλ€.
POSIX.1-2001μ λ°λ₯΄λ©΄ "μ μ ν νΉκΆ"μ κ°μ§ νλ‘μΈμ€κ° clock_settime()
μ μ΄μ©ν΄ CLOCK_PROCESS_CPUTIME_ID
λ° CLOCK_THREAD_CPUTIME_ID
ν΄λμ μ€μ ν μ μλ€. 리λ
μ€μμ μ΄ ν΄λλ€μ μ€μ κ°λ₯νμ§ μλ€. (μ¦, μ΄λ€ νλ‘μΈμ€λ "μ μ ν νΉκΆ"μ κ°μ§κ³ μμ§ μλ€.)
date(1)
, gettimeofday(2), settimeofday(2), time(2), adjtime(3), clock_getcpuclockid(3), ctime(3), ftime(3), pthread_getcpuclockid(3), sysconf(3), time(7), vdso(7), hwclock(8)
2019-03-06