이름
nanosleep - 지정한 시간에 실행을 잠시 멈춘다.
사용법
#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);
설명
nanosleep 은 적어도 *req 에 지정된 시간만큼 프로그램 실행을 늦춘다. 시그널이 프로세스로 전달됐다면그런 기능은
더 빨리 반환할 수 있다. 그 기능은 시그널이 프로세스에 전달되었다면더 빨리 반환할 수 있다. -1이 반환되는 경 우
EINTR 로 errno를 설정하고, rem 이 NULL 이 아니라면 rem 이 가리키는 곳에 남은 시간을 기록한다. 그후 *rem 값은
다시 nanosleep 오출에 사용될 수 있다.
timespec 은 나노초의 정밀도를 가진 시간 간격을 지정하는데 사용된다. 그것은 <time.h> 에 지정되고
struct timespec
{
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
의 형태를 갖는다.
나노초필드 값은 에서 999 999 999의 범위안에 들어야 한다.
sleep(3) 와 usleep(3) 를 비교한다면, nanosleep 는 모든 POSIX 표준인 시그널에 영향을 주지 않는 잇점이 있다. 그것
은 높은시간 분석을 제공하고, 더 쉽게 시그널에 의해 중단된 계속적인 대기상태를허락한다.
에러
에러나 예외(exception)의 경우, nanosleep 시스템 호출은 0대신 -1을 반환하고 다음 값중 하나로 errno 를 설정한다:
EINTR 일 시 중 지 는 프로세스에 전달된 비블록화 시그널에 의해 중단된다. 남은 대기 시간은 프로세스가 쉽게
nanosleep 를 다시 호출할 수 있도록 *rem에 기록되고, 일시정지는 계속된다.
EINVAL tv_nsec 필드안의 값은 0에서 999 999 999범위가 아니거나 tv_sec 가 음수이다.
버그
nanosleep 의 현재 구현은 1/HZ s (i.e, 10 ms on Linux/i386 and 1 ms on Linux/Alpha) 의 resolution을 가지고 있 는
표 준의 커널 타이머 메카니즘을 기본으로한다. 그러므로, nanosleep 는 적어도 지정된 시간만큼 항상 일시 정지한다.
그러나 그것은 프로세스가 다시 실행가능해지기까지 지정된것 보다 10ms이상 더 걸릴 수 있다. 같은 이유로, *rem에 전
달된 시그널의 반환값은 대개 1/HZ s정도 된다.
더 욱 더 정확한 일시정지가 필요한 응용프로그램처럼 nanosleep 도 또한 매우정확한 일시정지가 가능하다. 프로세스가
SCHED_FIFO 나 SCHED_RR 와 같은 실제시간정책에서 스케쥴링되었다면, 2ms이상의 일시정지는 마이크로초의 정밀도를 가
진다.
호환
POSIX.1b (formerly POSIX.4).
관련 항목
sleep(3), usleep(3), sched_setscheduler(2), timer_create(2)