본문 바로가기

개발자/Linux 리눅스

리눅스 signal 을 타이머 알람으로 사용하기 Linux signal use Timer Alarm




디바이스 드라이버를 이용해서 CPU의 내장 타이머들을 이용해서 직접적으로 제어를 해도 되지만, 

대략 1초 이상의 초단위 타이머를 사용하고자 한다면 심플하게 signal 함수를 이용해서 초단위의 타이머를 구현할 수 있다. 아주 작은 순간 타이머 구현하느 방법은 아래 포스팅을  참고한다.




signal 중에서 SIGALRM 이 있는데 이 signal은 alarm 함수가 보내는 signal 이다. 이 alarm을 주기적으로 발생하고 signal을 처리 하면 리눅스에서도 타이머를 사용할 수 있다.



소스코드다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
 
#define INTERVAL 1 //단위가 초(sec)이다.
 
void mytimer(int signo)
{
    printf("mytimer called........ \n");
    alarm(INTERVAL); 
    // 이렇게 해주면 알람처리후에 다시 알람이 등록되어 이후에도
    // 계속 구동되게 된다.
}
 
main()
{
    struct sigaction act;
    act.sa_handler = mytimer;
    //SIGALRM이란 시그널이 발생할 경우에 동작시킬 핸들러 함수를 등록하는 구문
    //SIGALRM이 발생하면 mytimer를 호출 - mytimer에서 원하는 작업을 추가하면 됩니다.
    sigemptyset(&act.sa_mask);
    act.sa_flags = 0;
 
    sigaction(SIGALRM, &act, 0);
    alarm(INTERVAL);
 
    while(1)
    {
        sleep(100);
    }
}
cs



출처 : http://egloos.zum.com/shiyoul/v/4360104