'2022/01'에 해당되는 글 1건

  1. 2022.01.29 clock_gettime

clock_gettime

programming/C_C++ 2022. 1. 29. 20:23



#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>

int get_sys_uptime(struct timeval *tv_p);

int main(int argc, char *argv[])
{
int nRet;
struct timeval tvTm;

nRet = get_sys_uptime(&tvTm);
if( nRet != 0 ){
printf("ERROR_FAIL get_sys_uptime nRet:%d\n", nRet);
return (-1);
}

printf("get_sys_uptime nRet:%d tv_sec:%ld tv_usec:%ld \n", nRet, tvTm.tv_sec, tvTm.tv_usec);

return 0;
}

int get_sys_uptime(struct timeval *tv_p)
{
int nRet;
struct timespec tsp;

nRet = clock_gettime(CLOCK_MONOTONIC, &tsp);
if( nRet != 0 ){
printf("ERROR_FAIL clock_gettime nRet:%d\n", nRet);
return (-1);
}

tv_p->tv_sec = tsp.tv_sec;
tv_p->tv_usec = tsp.tv_nsec / 1000;

return 0;
}

실행결과 
./a.out
get_sys_uptime nRet:0 tv_sec:2354 tv_usec:333965 

 

struct timespec {
time_t    tv_sec;      /* seconds */
long      tv_nsec;     /* nanoseconds */
};

 

#include <time.h>

int clock_gettime(clockid_t clk_id, struct timespec *tp);

CLOCK_REALTIME
시스템 전역의 실제 시간입니다.
CLOCK_REALTIME_COARSE
시스템 전역의 실제시간인데, CLOCK_REALTIME 보다 실행시간이 많이 빠릅니다.
정확도가 떨어지는 대신 매우 빠른 function call 을 하고싶다면 이 아규먼트를 사용하면 됩니다.
CLOCK_MONOTONIC
단조 시계로 특정시간부터 흐른 시간을 측정합니다. (일반적으로 부팅이후 시간)
시스템 관리자는 이 값을 초기화 할수 있습니다.

clock_gettime() 이 성공하면 0을 리턴하고, 실패하면 -1을 리턴합니다. (errno 값이 셋팅되어집니다.)

에러값 
EFAULT
tp 주소가 접근가능한 주소 공간 밖을 가르키고 있는경우.
EINVAL
clk_id 값이 이 시스템에서 지원하지 않는 값일 경우.
EPERM
clock_settime() 에서 클럭을 설정한 권한이 없는 경우.

 

 

 

 

 

Posted by 공간사랑

댓글을 달아 주세요