링크 ux 의 time 처리

커 널 에는 세 개의 다른 시간 이 있다.
Wall time (real time), Process time, Monotonic time.
Wall time, 즉 rtc 시계.
Process time, 프로 세 스 실행 시간.
Monotonic time, 즉 시스템 이 boot 이후 현재 시간 까지 입 니 다.
시간 을 나타 내 는 데이터 구조:
typedef __timer_t timer_t;

struct timeval
   {
    __time_t tv_sec;            /* Seconds.  */
      __suseconds_t tv_usec;      /* Microseconds.  */
   };

 struct timespec
{
  __time_t tv_sec;            /* Seconds.  */
  long int tv_nsec;           /* Nanoseconds.  */
 };

그 중 세 번 째 가 가장 좋다. 왜냐하면 그 는 나 초 까지 정확 할 수 있 기 때문이다.
위 에서 표시 할 수 있 는 것 은 초 이다. 우 리 는 때때로 더욱 직관 적 인 표현 이 필요 하기 때문에 아래 의 데이터 구조 가 있다.
struct tm
 {
 int tm_sec;                   /* Seconds.     [0-60] (1 leap second) */
   int tm_min;                   /* Minutes.     [0-59] */
int tm_hour;                  /* Hours.       [0-23] */
  int tm_mday;                  /* Day.         [1-31] */
 int tm_mon;                   /* Month.       [0-11] */
  int tm_year;                  /* Year - 1900.  */
  int tm_wday;                  /* Day of week. [0-6] */
 int tm_yday;                  /* Days in year.[0-365] */
  int tm_isdst;                 /* DST.         [-1/0/1]*/

 #ifdef  __USE_BSD
  long int tm_gmtoff;           /* Seconds east of UTC.  */
   __const char *tm_zone;        /* Timezone abbreviation.  */
 #else
  long int __tm_gmtoff;         /* Seconds east of UTC.  */
   __const char *__tm_zone;      /* Timezone abbreviation.  */
 #endif
 };

clock_getres 이 함 수 는 서로 다른 시계의 정밀도, 즉 시계 간격 을 얻 습 니 다.
int clock_getres(clockid_t clk_id, struct timespec *res);
  #include <stdio.h>
 #include <time.h>
 
 int main()
 {
     clockid_t clocks[]= {
          CLOCK_REALTIME,
         CLOCK_MONOTONIC,
          CLOCK_PROCESS_CPUTIME_ID,
          CLOCK_THREAD_CPUTIME_ID,
         (clockid_t) -1,
      };
  
      int i;
      for(i=0;clocks[i] != (clockid_t) -1;i++)
     {
         struct timespec res;
         int ret;
         ret = clock_getres(clocks[i],&res);
         if(ret)
             perror("clock_getres");
         else
             printf("clock = [%d],sec = [%ld],nsec = [%ld]
",clocks[i],res.tv_sec,res.tv_nsec); } return 1; }

내 amd cpu 에서 출력 결 과 는 다음 과 같 습 니 다:
clock = [0],sec = [0],nsec = [4000250]
clock = [1],sec = [0],nsec = [4000250]
clock = [2],sec = [0],nsec = [1]
clock = [3],sec = [0],nsec = [1]

그 중에서 4000250 은 마침 0.04 초 이다. 즉, x86 구조의 시스템 시계 주파 수 는 250 hz 이다.
현재 시간 을 가 져 오 는 함수:
extern time_t time (time_t *__timer) __THROW;

int gettimeofday(struct timeval *tv, struct timezone *tz);

int clock_gettime(clockid_t clk_id, struct timespec *tp);
  #include <stdio.h>
 #include <time.h>
 
 int main()
 {
     clockid_t clocks[]= {
          CLOCK_REALTIME,
         CLOCK_MONOTONIC,
          CLOCK_PROCESS_CPUTIME_ID,
          CLOCK_THREAD_CPUTIME_ID,
         (clockid_t) -1,
      };
  
      int i;
      for(i=0;clocks[i] != (clockid_t) -1;i++)
     {
         struct timespec res;
         int ret;
         ret = clock_gettime(clocks[i],&res);
         if(ret)
             perror("clock_getres");
         else
             printf("clock = [%d],sec = [%ld],nsec = [%ld]
",clocks[i],res.tv_sec,res.tv_nsec); } return 1; }

결 과 를 통 해 4 개의 시계의 다른 의 미 를 알 수 있다.예 를 들 면 CLOCKREALTime 에서 볼 수 있 는 결 과 는 1970 년 이후 거 친 초 수 였 다.
설정 시간의 함수 와 get 차이 가 많 지 않 습 니 다:
int stime(time_t *t);

int settimeofday(const struct timeval *tv, const struct timezone *tz);

int clock_settime(clockid_t clk_id, const struct timespec *tp);

대부분의 시스템 에서 시 계 를 설정 하고 CLOCK 만 설정 할 수 있 습 니 다.REALTIME。。
여기에 더 높 은 함수 가 하나 더 있다.
#include <sys/timex.h>

       int adjtimex(struct timex *buf);

이 함 수 는 커 널 시 계 를 동기 화 하 는 데 쓰 인 다.구체 적 인 용법 은 man 을 보 러 갈 수 있다.
sleep 의 4 개 함수:


sleep
usleep
int nanosleep(const struct timespec *req, struct timespec *rem);
long sys_clock_nanosleep (clockid_t which_clock, int flags, const struct timespec *rqtp, struct timespec *rmtp);

sleep 과 usleep 는 차이 가 크 지 않 습 니 다. 하 나 는 초 이 고 하 나 는 밀리초 입 니 다.
nanosleep 와 그들의 차 이 는 나 초 를 사용 하 는 것 이 며, 그 는 신호 로 이 루어 지 는 것 이 아니 므 로, sleep 과 usleep 를 사용 하지 않 는 것 을 권장 합 니 다.
마지막 함 수 는 우리 가 선택 한 시 계 를 선택 할 수 있다.

좋은 웹페이지 즐겨찾기