리눅스 타이머 프로그래밍
- 프로그래밍/리눅스 프로그래밍
- 2020. 7. 31.
반응형
timer_settime()
타이머를 시작하거나 중지한다.
해당 함수의 원형은 다음과 같다.
#include <time.h>
int timer_settime(timer_t timerid,
int flags,
const struct itimerspec *new_value,
struct ittimerspec *old_value);
timerid로 식별되는 타이머를 시작하거나 중지한다. timerid는 timer_create()를 통해 생성된 timer 식별자이다.
함수 호출자는 타이머 첫 만기 시점 및 반복주기를 new_value에 설정해야 한다.
ittimerspec 구조체의 형식은 다음과 같다.
struct timespec
{
time_t tv_sec; // 초값
long tv_nsec; // 나노초값
}
struct itimerspec
{
struct timespec it_interval; // 타이머 주기
struct timespec it_value; // 첫 만기 시점
}
new_value->it_value는 첫 만기 시점을 설정한다.
- 0이 아닐 경우: 타이머가 시작되고 it_value에 설정된 시점에 만기된다. 만약 타이머가 이미 동작 중이면 기존 설정을 엎어쓴다.
- 0일 경우: 타이머가 해제(중지)된다.
new_value->it_interval는 타이머의 반복 주기를 설정한다.
- 0이 아닐 경우: 타이머 만기 시마다 new_value->it_interval 값으로 타이머가 재로드된다.
- 0일 경우: 타이머는 it_value에 지정된 시점에 한번만 만기된다.
함수의 리턴값은 다음과 같다.
- 0: 성공
- -1: 실패(errno에 에러값이 설정된다)
에러 발생 시 설정되는 errno 값은 다음과 같다.
- EFAULT: new_value, old_value 가 유효한 포인터가 아닐 경우
- EINVAL: timerid가 유효하지 않을 경우, EINVAL new_vale.it_value가 음수일 경우, new_value.it_value.tv_nsec이 음수이거나 999,999,999 보다 클 경우
함수 사용의 예제는 다음과 같다.
int example(void)
{
// timer_create() 함수로 timer 생성
struct itimerspec ts;
ts.it_value.tv_sec = 1; // 1초 후에 첫 만기된다.
ts.it_value.tv_nsec = 0;
ts.it_interval.tv_sec = 2; // 첫 만기 후 2초마다 만기된다.
ts.it_interval.tv_nsec = 0;
int ret = timer_settime(timer, 0, &ts, NULL);
if (ret == -1) {
printf("Fail to timer_settimer(): %m\n");
return -1;
}
return 0;
}
'프로그래밍 > 리눅스 프로그래밍' 카테고리의 다른 글
리눅스 TUN/TAP 디바이스 프로그래밍 (1) | 2021.01.28 |
---|---|
프로세스 간 통신(IPC) 프로그래밍 - 메시지큐 (0) | 2021.01.19 |
GPSd를 이용한 GNSS 프로그래밍 (0) | 2020.12.24 |
리눅스 프로그래밍 - 프로세스 종료 신호(SIGINT, SIGTERM) 후킹하기 (0) | 2020.08.21 |
리눅스 네트워크 프로그래밍 - CAN(Controller Area Network) 통신 (2) | 2020.04.27 |
리눅스 네트워크 프로그래밍 - UDP6(UDP over IPv6) 송수신 (0) | 2020.03.04 |
리눅스 네트워크 프로그래밍 - 네트워크 인터페이스 비활성화하기 (0) | 2020.02.16 |
리눅스 네트워크 프로그래밍 - 네트워크 인터페이스 활성화하기 (0) | 2020.02.15 |