상세 분석 C++신호 처리
일부 신 호 는 프로그램 에 포착 되 지 않 지만 아래 표 에 열 거 된 신 호 는 프로그램 에서 포착 할 수 있 고 신 호 를 바탕 으로 적당 한 동작 을 취 할 수 있다.이 신 호 는 C+헤더 파일
시그 널
묘사 하 다.
SIGABRT
호출 과 같은 프로그램의 이상 종료 abort。
SIGFPE
잘못된 산술 연산,예 를 들 어 0 으로 나 누 거나 넘 치 는 조작.
SIGILL
불법 지령 을 검사 하 다.
SIGINT
프로그램 종료(interrupt)신호.
SIGSEGV
메모리 에 불법 으로 접근 하 다.
SIGTERM
프로그램 에 보 내 는 종료 요청 입 니 다.
signal()함수
C++신호 처리 라 이브 러 리 는 돌발 사건 을 포착 하기 위해 signal 함 수 를 제공 합 니 다.다음은 signal()함수 의 문법 입 니 다.
void (*signal (int sig, void (*func)(int)))(int);
이 함 수 는 두 개의 인 자 를 수신 합 니 다.첫 번 째 인 자 는 하나의 정수 로 신호 의 번 호 를 대표 합 니 다.두 번 째 매개 변 수 는 신호 처리 함 수 를 가리 키 는 지침 이다.
signal()함수 로 SIGINT 신 호 를 캡 처 하 는 간단 한 C++프로그램 을 만 듭 니 다.프로그램 에서 어떤 신 호 를 잡 으 려 고 하 든 signal 함수 로 신 호 를 등록 하고 신호 처리 프로그램 과 연결 해 야 합 니 다.아래 의 실례 를 보십시오.
#include <iostream>
#include <csignal>
#include <unistd.h>
using namespace std;
void signalHandler( int signum )
{
cout << "Interrupt signal (" << signum << ") received.
";
//
//
exit(signum);
}
int main ()
{
// SIGINT
signal(SIGINT, signalHandler);
while(1){
cout << "Going to sleep...." << endl;
sleep(1);
}
return 0;
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.Going to sleep....
Going to sleep....
Going to sleep....
현재 Ctrl+C 를 누 르 면 프로그램 을 중단 합 니 다.프로그램 캡 처 신 호 를 볼 수 있 습 니 다.프로그램 은 다음 과 같은 내용 을 인쇄 하고 종료 합 니 다.
Going to sleep....
Going to sleep....
Going to sleep....
Interrupt signal (2) received.
raise()함수
함수 raise()를 사용 하여 신 호 를 생 성 할 수 있 습 니 다.이 함 수 는 정수 신호 번 호 를 매개 변수 로 하고 문법 은 다음 과 같 습 니 다.
int raise (signal sig);
여기 서 sig 는 보 낼 신호 의 번호 입 니 다.이 신 호 는 SIGINT,SIGABRT,SIGFPE,SIGLL,SIGSEGV,SIGTERM,SIGUP 을 포함 합 니 다.다음은 raise()함수 내부 에서 신 호 를 생 성 하 는 실례 입 니 다.
#include <iostream>
#include <csignal>
#include <unistd.h>
using namespace std;
void signalHandler( int signum )
{
cout << "Interrupt signal (" << signum << ") received.
";
//
//
exit(signum);
}
int main ()
{
int i = 0;
// SIGINT
signal(SIGINT, signalHandler);
while(++i){
cout << "Going to sleep...." << endl;
if( i == 3 ){
raise( SIGINT);
}
sleep(1);
}
return 0;
}
위의 코드 가 컴 파일 되 고 실 행 될 때 다음 과 같은 결 과 를 얻 고 자동 으로 종 료 됩 니 다.Going to sleep....
Going to sleep....
Going to sleep....
Interrupt signal (2) received.
이상 은 C++신호 처리 의 상세 한 내용 을 상세 하 게 분석 하 는 것 입 니 다.C+신호 처리 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HDU 원활 공사 & & 원활 공사 (차 트 법)모 성 은 도시 의 교통 상황 을 조사 하여 기 존의 도시 도로 통계 표를 얻 었 고 표 에는 모든 도로 가 직접 연 결 된 도시 가 열거 되 어 있다.성 정부의 '원활 한 공사' 목 표 는 성 전체의 어느 두 도시...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.