반응형


- 본 내용은 Linux (Ubuntu 14.04 lts)를 기반으로 제작되었습니다. -







UDP를 이용한 프로그래밍을 할 시, 데이터그램을 전달만 하고


그 데이터를 받는지, 안받는지는 서로가 확인이 불가능하다.


이럴 때 이용할 수 있는 시그널이 SIGALRM인데,


이 시그널을 이용하여 UDP의 통신을 만들기 전, SIGALRM에 대한 기본 코드를 살펴 보고자 한다.


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <signal.h> 
#include <unistd.h> 
#include <stdio.h>
#include <stdlib.h>
 
 
int count = 0;
 
void alarmHandler(int signal)
{
    count++;
    printf("Count :: %d\n",count);
    fflush(stdout);
 
    // alarm
    if(count < 5)
        alarm(2);
 
    else
    {
        printf("Count :: %d .. TIME OUT !\n",count);
        exit(0);
    }
    
}
 
int main()
{
    // 알람 시그널의 핸들러를 설치한다.
    signal(SIGALRM, alarmHandler);
    
    // 2초후 알람이 울리도록 한다.
    alarm(2);
 
    while(1)
    {
        printf("Now I'm in while statement\n");
        sleep(1);
    }
    return 0;
}
    
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



이 코드를 통해 알 수 있는 내용은 다음과 같다.


signal(SIGALRM, alarmHandler);을 통해 alarm(n)이 발동되면 n초후 시그널에 의해 alarmHandler로 넘어가게 되고,


alarmHandler함수가 실행된다. 이때 n초 전에는 while(1)에서 돌게되고 


n초 후에는 alarmHandler에 들어가서 돌다가 또 alarm(2)가 있으니 또 2초후 alarmHandler에 들어가게 된다.

(이때 또 2초가 되기전까지는 while에 들어온다.)



그림으로 program counter이 어디를 가르키고 있는지 확인해보자.

(program counter :: cpu가 코드를 읽는 위치라고 생각한다.)



이렇게 계속해서 반복하게 된다.










반응형