×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 2,101,837명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
반응형


- 본 내용은 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가 코드를 읽는 위치라고 생각한다.)



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










반응형
  1. 김태석 2020.06.02 04:18

    감사합니다 덕분에 더러운 실습을 마무리 지었네요!