Manpages

이 름

nanosleep − 지 정 한 시 간 에 실 행 을 잠 시 멈 춘 다 .

사 용 법

#include <time.h>

int nanosleep(const struct timespec *req, struct timespec *rem);

설 명

nanosleep 은 적 어 도 *req 에 지 정 된 시 간 만 큼 프 로 그 램 실 행 을 늦 춘 다 . 시 그 널 이 프 로 세 스 로 전 달 됐 다 면 그 런 기 능 은 더 빨 리 반 환 할 수 있 다 . 그 기 능 은 시 그 널 이 프 로 세 스 에 전 달 되 었 다 면 더 빨 리 반 환 할 수 있 다 . −1이 반 환 되 는 경 우 EINTRerrno를 설 정 하 고 , remNULL 이 아 니 라 면 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_FIFOSCHED_RR 와 같 은 실 제 시 간 정 책 에 서 스 케 쥴 링 되 었 다 면 , 2ms이 상 의 일 시 정 지 는 마 이 크 로 초 의 정 밀 도 를 가 진 다 .

호 환

POSIX.1b (formerly POSIX.4).

관 련 항 목

sleep(3), usleep(3), sched_setscheduler(2), timer_create(2)

역 자

ASPLINUX<man [AT] asp-linux.kr>, 2000년 7월 29