Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah `sigaction` Boleh Digunakan untuk Mengendalikan Peristiwa Ctrl-C dalam C ?

Bagaimanakah `sigaction` Boleh Digunakan untuk Mengendalikan Peristiwa Ctrl-C dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-11-15 03:41:02314semak imbas

How Can `sigaction` Be Used to Handle Ctrl-C Events in C  ?

Menggunakan sigaction untuk Mengendalikan Peristiwa Ctrl-C dalam C

Untuk menangkap acara Ctrl-C dalam C dengan cekap, pendekatan yang paling boleh dipercayai ialah menggunakan 'sigaction' fungsi. Ia memberikan kawalan dan keserasian yang lebih besar daripada fungsi 'isyarat' mudah.

Melaksanakan sigaction memerlukan pendekatan berstruktur:

  1. Isytiharkan Struktur sigaction:
    Tentukan struktur 'sigaction' dinamakan 'sigIntHandler'.
  2. Tetapkan Pengendali Isyarat:
    Tetapkan alamat fungsi pengendali ('my_handler') kepada 'sigIntHandler.sa_handler'. Dalam fungsi pengendali, lakukan tindakan yang diingini apabila menerima isyarat.
  3. Initialize Signal Mask:
    Initialize 'sigIntHandler.sa_mask' kepada set isyarat kosong menggunakan 'sigemptyset'. Ini membolehkan pengendali bertindak balas kepada isyarat yang ditentukan tanpa menyekat orang lain.
  4. Tetapkan Bendera Tindakan Isyarat:
    Tetapkan 'sigIntHandler.sa_flags' kepada '0' untuk menggunakan pilihan lalai.
  5. Daftar Tindakan Isyarat:
    Gunakan 'sigaction' dengan isyarat 'SIGINT' dan struktur pengendali yang ditentukan ('sigIntHandler') untuk mendaftarkan tindakan isyarat.
  6. Jeda Pelaksanaan:
    Panggil 'pause()' untuk hentikan pelaksanaan program sehingga isyarat diterima.
  7. Contoh Kod:
    Kod yang diubah suai berikut daripada soalan menunjukkan penggunaan 'sigaction':
#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;    
}

Pendekatan ini menyediakan mekanisme yang teguh untuk mengendalikan peristiwa Ctrl-C dalam C , memastikan kebolehpercayaan dan kecekapan dalam pelbagai pelaksanaan.

Atas ialah kandungan terperinci Bagaimanakah `sigaction` Boleh Digunakan untuk Mengendalikan Peristiwa 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