signal 중에서 SIGALRM 이 있는데 이 signal은 alarm 함수가 보내는 signal 이다. 이 alarm을 주기적으로 발생하고 signal을 처리 하면 리눅스에서도 타이머를 사용할 수 있다.
리눅스 상에서 TImer는 언듯 잘 떠올려지지 않는다. 윈도우 시스템에서는
SetTimer를 사용하면 쉽게 타이머를 사용할 수 있지만 리눅스는 메세지 베이스가 아니기 때문에 쉽게 떠오르지 않는다.
하지만 리눅스 시스템에도 이벤트는 있다 바로 signal이다. signal을 주기적으로 받을 수 있다면 타이머 대신으로도 사용할 수 있다.
signal 중에서 SIGALRM 이 있는데 이 signal은 alarm 함수가 보내는 signal 이다. 이 alarm을 주기적으로 발생하고 signal을 처리 하면 리눅스에서도 타이머를 사용할 수 있다. ^^ 한가지 아쉬운 점은 최소 단위가 1초라는 점이다. 아래 코드를 실행하면 1초 간격으로 TImer Call 이라는 문장이 출력 된다.
아래 코드는 간결 하기 때문에 라인 바이 라인으로 설명하지는 않겠다.
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#define INTERVAL 1
void timer(int signo)
{
printf("Timer Call\n");
alarm(INTERVAL);
}
main()
{
struct sigaction act;
act.sa_handler = timer;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGALRM, &act, 0);
alarm(INTERVAL);
while(1)
{
sleep(100);
}
}
'서버 > Linux' 카테고리의 다른 글
LINUX에서 iso이미지 마운트하는 방법 (0) | 2012.11.19 |
---|---|
RHCSA에서 학습해야할 내용 (0) | 2012.11.05 |
시그널 처리 프로그램 SIGINT, SIGQUIT, SIGTSTP (0) | 2007.11.15 |