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:
-
Isytiharkan Struktur sigaction:
Tentukan struktur 'sigaction' dinamakan 'sigIntHandler'.
-
Tetapkan Pengendali Isyarat:
Tetapkan alamat fungsi pengendali ('my_handler') kepada 'sigIntHandler.sa_handler'. Dalam fungsi pengendali, lakukan tindakan yang diingini apabila menerima isyarat.
-
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.
-
Tetapkan Bendera Tindakan Isyarat:
Tetapkan 'sigIntHandler.sa_flags' kepada '0' untuk menggunakan pilihan lalai.
-
Daftar Tindakan Isyarat:
Gunakan 'sigaction' dengan isyarat 'SIGINT' dan struktur pengendali yang ditentukan ('sigIntHandler') untuk mendaftarkan tindakan isyarat.
-
Jeda Pelaksanaan:
Panggil 'pause()' untuk hentikan pelaksanaan program sehingga isyarat diterima.
-
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