nanosleep(2) - wariua/manpages-ko GitHub Wiki
nanosleep - κ³ ν΄μλ sleep
#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);
glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
nanosleep()
_POSIX_C_SOURCE >= 199309L
nanosleep()
μ μ μ΄λ *req
μ μ§μ ν μκ°μ΄ μ§λ λκΉμ§, λλ νΈμΆ μ€λ λμμ νΈλ€λ¬ νΈμΆμ μ λ°νκ±°λ νλ‘μΈμ€λ₯Ό μ’
λ£μν€λ μκ·Έλμ΄ μ λ¬λ λκΉμ§ νΈμΆ μ€λ λμ μ€νμ λ©μΆλ€.
νΈμΆμ΄ μκ·Έλ νΈλ€λ¬μ μν΄ μ€λ¨λλ κ²½μ°μλ nanosleep()
μ΄ -1μ λ°ννκ³ errno
λ₯Ό EINTR
λ‘ μ€μ νλ©° rem
μ΄ NULLμ΄ μλλ©΄ λ¨μ μκ°μ rem
μ΄ κ°λ¦¬ν€λ ꡬ쑰체μ μ¨ λ£λλ€. κ·Έλ¬λ©΄ *rem
μ κ°μΌλ‘ λ€μ nanosleep()
μ νΈμΆν΄μ μ§μ νλ μ€μ§ μκ°μ μ±μΈ μ μλ€. (νμ§λ§ NOTES μ°Έκ³ .)
timespec
ꡬ쑰체λ₯Ό μ¬μ©ν΄ λλ
Έμ΄ μ λ°λλ‘ μκ°μ μ§μ νλ€. κ΅¬μ‘°μ²΄κ° λ€μκ³Ό κ°μ΄ μ μλΌ μλ€.
struct timespec {
time_t tv_sec; /* μ΄ */
long tv_nsec; /* λλ
Έμ΄ */
};
λλ Έμ΄ νλμ κ°μ 0μμ 999999999 μ¬μ΄ λ²μμ¬μΌ νλ€.
sleep(3) λ° usleep(3)κ³Ό λΉκ΅ν λ nanosleep()
μλ λͺ κ°μ§ κ°μ μ΄ μλ€. μ λλ μκ°μ λμ ν΄μλλ‘ μ§μ ν μ μκ³ , POSIX.1μμ μ΄ ν¨μκ° μκ·Έλκ³Ό μνΈμμ©νμ§ μλλ€κ³ λͺ
νν λͺ
μΈνκ³ μμΌλ©°, μκ·Έλ νΈλ€λ¬λ‘ μ€λ¨λ μ λ€κΈ°λ₯Ό μ¬κ°νλ μΌμ΄ μ¬μμ§λ€.
μμ² μκ° λμ μ±κ³΅μ μΌλ‘ μ λ κ²½μ° nanosleep()
μ 0μ λ°ννλ€. νΈμΆμ΄ μκ·Έλ νΈλ€λ¬μ μν΄ μ€λ¨λκ±°λ μ€λ₯λ₯Ό λ§λ κ²½μ°μλ -1μ λ°ννλ©° μ€λ₯λ₯Ό λνλ΄λλ‘ errno
λ₯Ό μ€μ νλ€.
EFAULT
- μ¬μ©μ 곡κ°μΌλ‘λΆν° μ 보λ₯Ό 볡μ¬νλ©΄μ λ¬Έμ λ°μ.
EINTR
- μ€λ λλ‘ μ λ¬λ μκ·Έλμ μν΄ ν΄μ§κ° μ€λ¨λμλ€. (signal(7) μ°Έκ³ .) λ¨λ μκ°μ΄
*rem
μ κΈ°λ‘λμμΌλ―λ‘ μ€λ λμμ λ°λ‘nanosleep()
μ λ€μ νΈμΆν΄μ ν΄μ§λ₯Ό μ΄μ΄κ° μ μλ€. EINVAL
-
tv_nsec
νλμ κ°μ΄ 0μμ 999999999κΉμ§ λ²μ μμ΄ μλκ±°λtv_sec
μ΄ μμμ΄λ€.
POSIX.1-2001, POSIX.1-2008.
req
μ μ§μ ν μκ°μ΄ κΈ°λ° ν΄λ μ λ°λ(time(7) μ°Έκ³ )μ μ μλ°°κ° μλλ©΄ λ€μ λ°°μλ‘ μκ°μ μ¬λ¦Ό νλ€. λν μ λ€κΈ°κ° λλ νμλ CPUμμ νΈμΆ μ€λ λλ₯Ό λ€μ μ€νν μ μκ² λ λκΉμ§ μ§μ°μ΄ μμ μλ μλ€.
nanosleep()
μ΄ μλμ μκ° λμ μ λ λ€λ μ μ΄ μκ·Έλ λλ¬Έμ λ°λ³΅ν΄μ νΈμΆμ΄ μ¬μμλλ κ²½μ° λ¬Έμ κ° λ μ μλ€. νΈμΆ μ€λ¨κ³Ό μ¬μμ μ¬μ΄μ μκ° λλ¬Έμ μ λ€κΈ°κ° μ΅μ’
μ μΌλ‘ λλλ μμ μ΄ λ¦μΆ°μ§κ² λκΈ° λλ¬Έμ΄λ€. clock_nanosleep(2)μ μ λ μκ° κ°μΌλ‘ μ¬μ©νλ©΄ μ΄ λ¬Έμ λ₯Ό νΌν μ μλ€.
POSIX.1μμλ nanosleep()
μ΄ CLOCK_REALTIME
ν΄λμ λ°λΌ μκ°μ μ¬μΌ νλ€κ³ λͺ
μΈνλ€. νμ§λ§ 리λ
μ€μμλ CLOCK_MONOTONIC
ν΄λμΌλ‘ μκ°μ μ°λ€. μ΄κ² μ€μμΉ μμ μλ μλ κ²μ΄, POSIX.1μ clock_settime(2) λͺ
μΈμμλ CLOCK_REALTIME
μ λΆμ°μμ λ³κ²½μ΄ nanosleep()
μ μν₯μ λΌμΉμ§ λ§μμΌ νλ€κ³ λ§νλ€.
clock_settime(2)μ ν΅ν΄
CLOCK_REALTIME
ν΄λμ κ°μ μ€μ νλ κ²μ΄ μ΄ ν΄λμ κΈ°λ°μΌλ‘ νnanosleep()
ν¨μλ₯Ό ν¬ν¨ν μλ μκ° μλΉμ€λ₯Ό κΈ°λ€λ¦¬λ©° λΈλ‘ λΌ μλ μ€λ λλ€μ μ΄λ€ μν₯λ μ£Όμ§ μμμΌ νλ€. ... λ°λΌμ κ·Έ μκ° μλΉμ€λ€μ ν΄λμ μ κ°μ΄λ μ΄μ κ°κ³Όλ μκ΄μμ΄ μμ²λ°μ μλμ μκ°μ΄ κ²½κ³Όνμ λ λ§λ£ν΄μΌ νλ€.
(κ°λ Ή μ΄λ€ μκ° μ μ½μ νλμ¨μ΄λ₯Ό μ μ΄νκΈ° μν΄) ν¨μ¬ λ μ λ°ν ν΄μ§κ° νμν μμ©μ μ§μνκΈ° μν΄μ SCHED_FIFO
λ SCHED_RR
κ°μ μ€μκ° μ μ±
μΌλ‘ μ€μΌμ€λ§ λ μ€λ λμμ nanosleep()
μ νΈμΆν κ²½μ° 2λ°λ¦¬μ΄κΉμ§μ ν΄μ§λ λ°μ λκΈ°λ₯Ό ν΅ν΄ λ§μ΄ν¬λ‘μ΄ μ λ°λλ‘ μ²λ¦¬νμλ€. μ΄ νΉμν νμ₯ λμμ 컀λ 2.5.39μμ μ κ±°λμμΌλ―λ‘ λ¦¬λ
μ€ 2.6.0 λ° μ΄ν 컀λμμλ μ΄μ©ν μ μλ€.
μκ·Έλμ μ‘μΌλ©° nanosleep()
μ μ΄μ©νλ νλ‘κ·Έλ¨μμ μμ£Ό λμ λΉλλ‘ μκ·Έλμ λ°λ κ²½μ°μλ μ€μΌμ€λ§ μ§μ°κ³Ό 컀λμ μλ©΄ μκ° λ° λ°νν remain
κ° κ³μ° μ€μ°¨ λλ¬Έμ nanosleep()
νΈμΆ μ¬μμμ΄ μ΄μ΄μ§λ©΄μ remain
κ°μ΄ μ²μ²ν μ¦κ°ν μλ μλ€. κ·Έλ° λ¬Έμ λ₯Ό νΌνλ €λ©΄ clock_nanosleep(2)μ TIMER_ABSTIME
νλκ·Έμ ν¨κ» μ¬μ©ν΄μ μ λμ μμ κΉμ§ μ λ€λ©΄ λλ€.
리λ
μ€ 2.4μμλ nanosleep()
μ΄ μκ·Έλ(κ°λ Ή SIGTSTP
)μ μν΄ μ μ§λλ©΄ SIGCONT
μκ·Έλλ‘ μ€λ λκ° μ¬κ°λ νμ νΈμΆμ΄ EINTR
μ€λ₯λ‘ μ€ν¨νλ€. μ΄ν μμ€ν
νΈμΆμ μ¬μμνλ κ²½μ°μλ μ€λ λκ° μ μ§λ μνμμ λ³΄λΈ μκ°μ΄ μ λ μκ°μ κ³μ°λμ§ μλλ€. 리λ
μ€ 2.6.0 λ° μ΄ν 컀λμλ μ΄ λ¬Έμ κ° κ³ μ³μ Έ μλ€.
clock_nanosleep(2), restart_syscall(2), sched_setscheduler(2), timer_create(2), sleep(3), usleep(3), time(7)
2017-09-15