'programming'에 해당되는 글 387건

  1. 2017.11.08 nanosleep - 지정한 시간에 실행을 잠시 멈춘다.

반응형

이름
       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)

반응형
Posted by 공간사랑
,