"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Sigaction 함수를 사용하여 C++에서 Ctrl-C 인터럽트를 원활하게 처리하는 방법은 무엇입니까?

Sigaction 함수를 사용하여 C++에서 Ctrl-C 인터럽트를 원활하게 처리하는 방법은 무엇입니까?

2024년 11월 17일에 게시됨
검색:966

How to Gracefully Handle Ctrl-C Interrupts in C   with the Sigaction Function?

C에서 Ctrl-C 이벤트 가로채기

Ctrl-C 이벤트 가로채기는 프로그래밍에서 필요한 작업입니다. 특히 우아하게 응답하려는 경우에는 더욱 그렇습니다. 예상치 못한 중단.

Sigaction 사용

C에서는 sigaction 함수를 사용하여 신호를 처리하는 것이 더 안정적입니다. 구문은 다음과 같습니다:

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

여기서:

  • signum: to 처리됨 Ctrl-C, SIGINT의 경우 신호 번호입니다.
  • act: 새 신호 처리기의 동작을 지정합니다.
  • oldact: 이전 동작을 저장합니다.

Thomas가 제시한 예에서 sigaction 구조는 다음과 같습니다.

struct sigaction sigIntHandler;

sigIntHandler.sa_handler = my_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;

여기서:

  • sa_handler: 핸들러 함수를 가리킵니다.
  • sa_mask: 이 신호를 처리하는 동안 방지할 신호 마스크입니다.
  • sa_flags: 추가 플래그, 일반적으로 0입니다.

SIGINT 신호와 함께 이 sigaction 구조를 사용합니다:

sigaction(SIGINT, &sigIntHandler, NULL);

핸들러 함수

마지막으로 신호에 응답하기 위한 핸들러 함수가 필요합니다. 예제에서 my_handler는 메시지를 인쇄하고 프로그램을 종료합니다.

void my_handler(int s){
   printf("Caught signal %d\n", s);
   exit(1);
}

전체 코드

다음은 sigaction을 사용하여 Ctrl-C 이벤트를 캡처하는 전체 코드입니다.

#include 
#include 
#include 
#include 

void my_handler(int s){
           printf("Caught signal %d\n",s);
           exit(1); 

}

int main(int argc,char** argv)
{

   struct sigaction sigIntHandler;

   sigIntHandler.sa_handler = my_handler;
   sigemptyset(&sigIntHandler.sa_mask);
   sigIntHandler.sa_flags = 0;

   sigaction(SIGINT, &sigIntHandler, NULL);

   pause();

   return 0;    
}

sigaction을 사용하면 Ctrl-C 이벤트를 안정적으로 포착하고 적절한 조치를 취할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3