Bagaimanakah saya boleh memintas isyarat Ctrl C dalam C?

DDD
Lepaskan: 2024-11-16 15:26:03
asal
314 orang telah melayarinya

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>
    Salin selepas log masuk
  2. Tentukan fungsi pengendali isyarat:

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

    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);
    Salin selepas log masuk

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

  4. Jeda program:

    pause();
    Salin selepas log masuk

    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;    
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan