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:
Sertakan pengepala yang diperlukan:
#include <signal.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h>
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.
Konfigurasikan sigaction:
struct sigaction sigIntHandler; sigIntHandler.sa_handler = my_handler; sigemptyset(&sigIntHandler.sa_mask); sigIntHandler.sa_flags = 0; sigaction(SIGINT, &sigIntHandler, NULL);
Di sini, anda melampirkan pengendali isyarat anda pada isyarat Ctrl C (SIGINT) dan nyatakan tetapan berkaitan isyarat.
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!