>백엔드 개발 >C++ >C에서 Ctrl C 신호를 어떻게 가로챌 수 있나요?

C에서 Ctrl C 신호를 어떻게 가로챌 수 있나요?

DDD
DDD원래의
2024-11-16 15:26:03376검색

How can I intercept Ctrl C signals in C  ?

C에서 Control-C 신호 가로채기

프로그래밍 영역에서는 흔히 사용되는 Ctrl 키와 같은 키보드 이벤트를 캡처해야 하는 경우가 많습니다. C는 일반적으로 프로그램 종료를 유발합니다. 이 문서에서는 C에서 Ctrl C 신호를 가로채는 방법, 즉 C에서 Ctrl C 신호를 가로채는 방법에 대해 설명합니다.

Ctrl C 이벤트 캡처

C에서는 Ctrl C를 캡처하는 두 가지 기본 방법이 있습니다. 이벤트: 신호 및 시그액션.

사용 sigaction

sigaction 기능은 다양한 구현에 걸쳐 더 큰 제어력과 이식성을 제공하므로 신호에 비해 더 안정적인 접근 방식을 제공합니다. sigaction을 사용하려면 다음 단계를 따르세요.

  1. 필요한 헤더 포함:

    #include <signal.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
  2. 신호 처리기 기능 정의:

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

    이 핸들러에서는 Ctrl C를 눌렀을 때 수행할 작업을 지정할 수 있습니다. 눌렀습니다.

  3. sigaction을 구성합니다.

    struct sigaction sigIntHandler;
    
    sigIntHandler.sa_handler = my_handler;
    sigemptyset(&amp;sigIntHandler.sa_mask);
    sigIntHandler.sa_flags = 0;
    
    sigaction(SIGINT, &amp;sigIntHandler, NULL);

    여기서 신호 처리기를 Ctrl C 신호(SIGINT)에 연결하고 신호 관련 설정을 지정합니다.

  4. 일시중지 프로그램:

    pause();

    이 함수는 프로그램이 Ctrl C를 포함한 신호를 기다리게 합니다.

예:

다음 예는 sigaction을 사용하여 Ctrl C를 캡처하는 방법을 보여줍니다. 이벤트:

#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

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;    
}

이 프로그램을 실행하고 Ctrl C를 누르면 "Caught signal 2"가 인쇄되고 정상적으로 종료됩니다.

위 내용은 C에서 Ctrl C 신호를 어떻게 가로챌 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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