Signals(신호) |
하드웨어적 인터럽트 : ARM, ATmega .. MCU 칩 .. 등등 |
소프트웨어적 인터럽트 : 리눅스 : Signal (신호) 윈도우 : Message (메세지) 자바 : Event (이벤트) |
위의 S/W 인터럽트중 Signal이 수행이 될때, 다음의 4가지중에 하나가 동작한다. 1. 신호가 무시된다. 프로세스는 전달되었다는 것을 인식못함. 2. 프로그램이 운영체제에 의해 강제적으로 종료됨. 3. 프로그램에 의해 지정된 신호 처리 루틴(signal-handling routine)이 수행. 4. 신호가 블록된다. 각 프로세스는 마스크(mask)를 가지며, 이것은 현재 해당되는 프로세스에 어떤신호가 블록되어있는지 나타낸다. 우린 보통 1, 3의 경우를 많이 본다. |
sigaction() 함수 |
int sigaction(int whichSignal, const struct sigaction *newAction, struct sigaction *oldAction) |
|
1. 구조체 안의 sa_handler 는 함수포인터로 함수의 주소를 가져올 수 있고, 반환형은 void 인자는 int 이다. 2. sa_mask 는 4가지의 함수로 조작할 수 있다. - int sigemptyset(sigset_t *set) - int sigfillset(sigset_t *set) - int sigaddset(sigset_t *set) - int sigdelset(sigset_t *set) <sa_mask의 신호형태 설정> |
테스트 소스 |
#include<stdio.h> #include<signal.h> void SMART(int ); int main() { struct sigaction st_Act; st_Act.sa_handler = SMART; sigfillset(&st_Act.sa_mask); st_Act.sa_flags = 0; sigaction(SIGINT,&st_Act,0); while(1) { printf("안녕하세요 'Q' 를 누르면 종료합니다.\n"); if('q' == getchar()) { break; } } return 0; } // 직접 SIGINT 를 넣어서 Ctrl+C 의 명령어를 지정해주었다. 글자가 출력되면서 꺼짐. void SMART(int sig) { printf("Ctrl + C가 눌러졌습니다\n"); exit(0); } |
'TCPIP' 카테고리의 다른 글
2013.07.04_멀티태스킹 테스트 (0) | 2013.07.05 |
---|---|
2013.07.03_UDP_기타이론설명By종영이형 (0) | 2013.07.04 |
2013.07.01_TCP(Transfer Control Protocol)_by종영이형 (0) | 2013.07.01 |
2013.06.27_Packet_Analyze_ (0) | 2013.06.27 |
2013.06.26_IP헤더구조_ (0) | 2013.06.26 |