Phần này xem cách viết chương trình C không bị kết thúc bằng Ctrl+C.
Ctrl+C tạo ngắt bàn phím (keyboard interrupt), dừng tiến trình hiện tại. Ở đây khi nhấn Ctrl+C, in thông báo rồi tiếp tục chạy. Dùng kỹ thuật xử lý tín hiệu (signal handling) trong C. Ctrl+C tạo tín hiệu SIGINT. Các tín hiệu khác:
| Tín hiệu | Mô tả |
|---|---|
| SIGABRT | Kết thúc bất thường |
| SIGFPE | Ngoại lệ số thực (chia cho 0) |
| SIGILL | Lệnh không hợp lệ |
| SIGINT | Yêu cầu chú ý tương tác gửi đến chương trình |
| SIGSEGV | Truy cập bộ nhớ không hợp lệ |
| SIGTERM | Yêu cầu kết thúc gửi đến chương trình |
Dùng hàm thư viện chuẩn signal() xử lý tín hiệu.
Ví dụ mã
#include <stdio.h>
#include <signal.h>
void sigint_handler(int signum) { // Handler cho SIGINT
// Reset handler bắt SIGINT lần sau
signal(SIGINT, sigint_handler);
printf("Không thể dừng bằng Ctrl+C \n");
fflush(stdout);
}
main() {
signal(SIGINT, sigint_handler);
while(1) { // vòng lặp vô tận
}
}Kết quả
Không thể dừng bằng Ctrl+C Không thể dừng bằng Ctrl+C