반응형
- 본 내용은 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가 코드를 읽는 위치라고 생각한다.)
이렇게 계속해서 반복하게 된다.
반응형
'Applied > Network' 카테고리의 다른 글
소켓 프로그래밍 - (13) TCP/IP 다중 통신 소스 코드 (fork 이용) (0) | 2016.10.27 |
---|---|
소켓 프로그래밍 - (12) TCP/IP 다중 통신 개념 (fork 이용) (0) | 2016.10.15 |
소켓 프로그래밍 - (10) signal함수 사용 방법 (0) | 2016.10.15 |
소켓 프로그래밍 - (9) kill 함수를 통한 자식 프로세스 종료 (0) | 2016.10.10 |
소켓 프로그래밍 - (8) 다중 fork() 사용과 이해 (0) | 2016.10.10 |