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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-13 01:35:02473검색

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: 처리할 신호 번호, 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);

Handler 함수

마지막으로 응답하려면 핸들러 함수가 필요합니다. 신호에. 예제에서 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를 안정적으로 잡을 수 있습니다. 사건을 인지하고 적절한 조치를 취합니다.

위 내용은 Sigaction 함수를 사용하여 C에서 Ctrl-C 인터럽트를 원활하게 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.