Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh memintas isyarat Ctrl C dalam C?

Bagaimanakah saya boleh memintas isyarat Ctrl C dalam C?

DDD
DDDasal
2024-11-16 15:26:03376semak imbas

How can I intercept Ctrl C signals in C  ?

Memintas Isyarat Kawalan-C dalam C

Dalam bidang pengaturcaraan, selalunya perlu untuk menangkap peristiwa papan kekunci, seperti Ctrl di mana-mana C, yang biasanya mencetuskan penamatan program. Artikel ini menangani keperluan khusus ini: cara memintas isyarat Ctrl C dalam C .

Merakam Peristiwa Ctrl C

Dalam C , terdapat dua kaedah utama untuk menangkap Ctrl C peristiwa: isyarat dan sigaction.

Menggunakan sigaction

Fungsi sigaction menyediakan pendekatan yang lebih dipercayai berbanding isyarat, kerana ia menawarkan kawalan dan mudah alih yang lebih besar merentas pelaksanaan yang berbeza. Untuk menggunakan sigaction, ikuti langkah berikut:

  1. Sertakan pengepala yang diperlukan:

    #include <signal.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
  2. Tentukan fungsi pengendali isyarat:

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

    Dalam pengendali ini, anda boleh menentukan tindakan yang perlu dilakukan apabila Ctrl C ditekan.

  3. Konfigurasikan sigaction:

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

    Di sini, anda melampirkan pengendali isyarat anda pada isyarat Ctrl C (SIGINT) dan nyatakan tetapan berkaitan isyarat.

  4. Jeda program:

    pause();

    Fungsi ini menyebabkan atur cara menunggu isyarat, termasuk Ctrl C.

Contoh:

Contoh berikut menunjukkan cara menggunakan sigaction untuk menangkap peristiwa 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;    
}

Apabila anda jalankan program ini dan tekan Ctrl C, ia akan mencetak "Caught signal 2" dan keluar dengan anggun.

Atas ialah kandungan terperinci Bagaimanakah saya boleh memintas isyarat Ctrl C dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Artikel seterusnya: