728x90
SIGNAL?
Signal 은 비동기적 이벤트에 대한 handling(처리) 를 가능하게 만든다.
모든 Signal 은 이름이 있다. 그리고 이 이름들은 모두 정수로 연결되어있다.
signal(SIGNAL, sigHandlerFunc);
첫번째 인자로는 처리하고자하는 Signal 이름, 두번째는 해당 시그널이 들어왔을때 내가 하고자 하는 내용을
담은 함수를 넣어준다.
이 때 이 함수는 integer 변수 1개를 인자로 받는 void 함수이어야 한다.
SIGFPE 를 처리하는 함수 예제
#include <stdio.h>
#include <signal.h>
static void sig_fpe(int);
int main(){
pid_t pid; int i;
signal(SIGFPE, sig_fpe);
i = i/0;
}
static void sig_fpe(int signo)
{
pid_t pid;
int stat;
printf("DIVIDE BY ZERO ERROR!\n");
exit(1);
}
SIGFPE 는 Floating Point Error 를 의미한다.
이 경우에는 i = i/0 이 해당 에러를 유발한다. 0으로 나누면 산술적 오류가 발생하기 때문이다.
만약 해당 시그널 처리를 하지 않으면 프로그램 실행시
Floating point exception (core dumped)
라는 에러가 출력되게 될 것이다.
위처럼 시그널핸들러 함수를 정해주면, exit(1) 은 프로세스가 비정상적인 결과로 종료되도록 한다.
위 코드 실행시 출력:
DIVIDE BY ZERO ERROR!
'프로그래밍 > ETC' 카테고리의 다른 글
[intelliJ] 단축키 알려주는 플러그인 (0) | 2021.03.23 |
---|---|
[hyperledger-fabric] hyperledger fabric 1.4 설치 및 실행 가이드 (0) | 2020.09.20 |
[VScode] Putty 말고 VScode 로 ssh 서버 원격 접속하기 (0) | 2020.04.26 |
[VScode] WSL VScode 에서 g++11 디버깅하기 (0) | 2020.04.18 |
[파이썬] 숫자야구 만들기 (0) | 2019.12.25 |