Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Hàm raise() trong C/C++

Hàm raise() gửi tín hiệu (signal) đến chính tiến trình đang chạy. Hàm xử lý tín hiệu đã đăng ký qua signal() sẽ được gọi. Khai báo trong <signal.h>. Trả về 0 nếu thành công, khác 0 nếu lỗi.

Cú pháp

int raise(int sig);

Tham số: sig – Số hiệu tín hiệu (ví dụ: SIGILL, SIGSEGV, SIGTERM).

Ví dụ

#include <signal.h>
#include <stdio.h>

void handler(int sig) {
    printf("Nhan tin hieu: %d\n", sig);
}

int main() {
    signal(SIGILL, handler);  // Dang ky handler cho SIGILL
    printf("Gui tin hieu: %d\n", SIGILL);
    raise(SIGILL);            // Gui tin hieu den chinh minh
    return 0;
}

Kết quả

Gui tin hieu: 4
Nhan tin hieu: 4

Giải thích: Đăng ký handler cho SIGILL (Illegal Instruction). Gọi raise(SIGILL) gửi tín hiệu, handler được gọi in ra số hiệu tín hiệu.

Các tín hiệu phổ biến

Tín hiệuGiá trịÝ nghĩa
SIGINT2Interrupt (Ctrl+C)
SIGILL4Illegal instruction
SIGSEGV11Segmentation fault
SIGTERM15Termination request
SIGABRT6Abort từ abort()
Lưu ý: Xử lý signal phải async-signal-safe (chỉ dùng hàm an toàn trong handler). printf trong handler chỉ để demo, thực tế nên tránh.