linux timerfd_create 설명

4756 단어 server
링크 ux timerfd 설명
        #include 
       int timerfd_create(int clockid, int flags);
       int timerfd_settime(int fd, int flags,
                           const struct itimerspec *new_value,
                           struct itimerspec *old_value);
       int timerfd_gettime(int fd, struct itimerspec *curr_value);   

일련의 타이머 와 관련 된 api 는 서로 다른 것 은 파일 설명 자 를 통 해 타이머 가 만 료 되 었 는 지 알려 주 는 것 입 니 다. Liux 의 모든 파일 이 생각 날 수 있 습 니 다. 파일 설명자 의 읽 기와 쓰기 상 태 를 통 해 이벤트 가 도 착 했 는 지 여 부 를 나타 내 면 select, poll, epoll 과 함께 먹 을 수 있 습 니 다.
timerfd_create()
타이머 대상 을 만 들 고 대상 을 가리 키 는 파일 설명 자 를 되 돌려 줍 니 다. clockid 매개 변 수 는 이 타이머 가 사용 하 는 시계 종 류 를 제한 합 니 다. CLOCK 이 어야 합 니 다.REALTIME 혹은 CLOCKMONOTONIC. CLOCK_REALTime 은 설정 가능 한 시스템 너비 입 니 다. CLOCKMONOTONIC 에서 설정 할 수 없 는 시 계 는 시스템 시간 변화 에 영향 을 받 지 않 습 니 다 (예: 인위적인 시스템 시간 변경). clockgettime 은 이 시계의 현재 값 을 가 져 올 수 있 습 니 다. Linux 2.6.27 부터 다음 값 은 timerfd 를 제어 하기 위해 flags 매개 변수 에 위치 하거나 접근 할 수 있 습 니 다.create () 행위: TFDNONBLOCK 설정 ONONBLOCK 파일 상태 표지 가 되 돌아 오 는 이 새 파일 설명자 입 니 다. fcntl 을 사용 하면 같은 효 과 를 얻 을 수 있 습 니 다. TFDCLOEXEC 는 close - on - exec (FD CLOEXEC) 로 고 를 파일 설명자 에 설정 합 니 다. fopen 의 O 참조CLOEXEC 로 고 는 어떤 용도 로 사용 되 는 지 설명 합 니 다. I 는 Linux versions up to and including 2.6.26, flags 는 0 이 어야 합 니 다.
timerfd_settime()
   timerfd_settime()                   .
   new_value                   .       itimer     ,      ,             
         timespec:
           struct timespec {
               time_t tv_sec;                /*   */
               long   tv_nsec;               /*    */
           };
           struct itimerspec {
               struct timespec it_interval;  /*       */
               struct timespec it_value;     /*        */
           }; 
   new_value.it_value            ,       .   new_value.it_value                 .   new_value.it_value      0      .
     new_value.it_interval                   ,      ,                   .   new_value.it_interval      0,          ,  new_value.it_value      .

   flags   0 ,         (new_value.it_value           clockid         ),    TFD_TIMER_ABSTIME ,    
          (new_value.it_value           clockid         ;  ,     timer            value new_value.it_value      ).

     old_value   NULL,itimerspec                           ;   timerfd_gettime()  .

timerfd_gettime()
   timerfd_gettime()   ,  curr_value,    itimerspec                  .

   it_value               .          0,           .              ,     TFD_TIMER_ABSTIME             .

   it_interval          .           0,              , curr_value.it_value      .

시간 파일 설명자 에 대한 동작:
   timerfd_create()              :

read
                                     timerfd_settime()  ,             ,   buffer         
             8    (uint64_t)             .  (          ,             .)
                              ,                ,                 EAGAIN             (    fcntl F_SETFL    O_NONBLOCK  ).

                   EINVAL,      buffer    8  .

poll, select 또는 비슷 한
                      (select readfds   ; poll POLLIN   )               .

                              APIs: pselect, ppoll,   epoll.

ioctl
            timerfd-        :
          TFD_IOC_SET_TICKS ( Linux 3.17  )
                              .            0 8        (uint64_t*)          .          ,               .                    checkpoint/restore.                    CONFIG_CHECKPOINT_RESTORE  .

close
                        ,      .                             ,                  .

fork 뒤의 의미
      fork  ,                 ,    timerfd_create()   .                    ,                  .

execve 의 의미
      timerfd_create()              execve,                    .

좋은 웹페이지 즐겨찾기