?? signal.h
字號:
#ifndef _SIGNAL_H#define _SIGNAL_H#include <sys/types.h> // 類型頭文件。定義了基本的系統數據類型。typedef int sig_atomic_t; // 定義信號原子操作類型。typedef unsigned int sigset_t; /* 32 bits */// 定義信號集類型。#define _NSIG 32 // 定義信號種類 -- 32 種。#define NSIG _NSIG // NSIG = _NSIG// 以下這些是Linux 0.11 內核中定義的信號。#define SIGHUP 1 // Hang Up -- 掛斷控制終端或進程。#define SIGINT 2 // Interrupt -- 來自鍵盤的中斷。#define SIGQUIT 3 // Quit -- 來自鍵盤的退出。#define SIGILL 4 // Illeagle -- 非法指令。#define SIGTRAP 5 // Trap -- 跟蹤斷點。#define SIGABRT 6 // Abort -- 異常結束。#define SIGIOT 6 // IO Trap -- 同上。#define SIGUNUSED 7 // Unused -- 沒有使用。#define SIGFPE 8 // FPE -- 協處理器出錯。#define SIGKILL 9 // Kill -- 強迫進程終止。#define SIGUSR1 10 // User1 -- 用戶信號1,進程可使用。#define SIGSEGV 11 // Segment Violation -- 無效內存引用。#define SIGUSR2 12 // User2 -- 用戶信號2,進程可使用。#define SIGPIPE 13 // Pipe -- 管道寫出錯,無讀者。#define SIGALRM 14 // Alarm -- 實時定時器報警。#define SIGTERM 15 // Terminate -- 進程終止。#define SIGSTKFLT 16 // Stack Fault -- 棧出錯(協處理器)。#define SIGCHLD 17 // Child -- 子進程停止或被終止。#define SIGCONT 18 // Continue -- 恢復進程繼續執行。#define SIGSTOP 19 // Stop -- 停止進程的執行。#define SIGTSTP 20 // TTY Stop -- tty 發出停止進程,可忽略。#define SIGTTIN 21 // TTY In -- 后臺進程請求輸入。#define SIGTTOU 22 // TTY Out -- 后臺進程請求輸出。/* Ok, I haven't implemented sigactions, but trying to keep headers POSIX *//* OK,我還沒有實現sigactions 的編制,但在頭文件中仍希望遵守POSIX 標準 */#define SA_NOCLDSTOP 1 // 當子進程處于停止狀態,就不對SIGCHLD 處理。#define SA_NOMASK 0x40000000 // 不阻止在指定的信號處理程序(信號句柄)中再收到該信號。#define SA_ONESHOT 0x80000000 // 信號句柄一旦被調用過就恢復到默認處理句柄。// 以下參數用于sigprocmask()-- 改變阻塞信號集(屏蔽碼)。這些參數可以改變該函數的行為。#define SIG_BLOCK 0 /* for blocking signals */// 在阻塞信號集中加上給定的信號集。#define SIG_UNBLOCK 1 /* for unblocking signals */// 從阻塞信號集中刪除指定的信號集。#define SIG_SETMASK 2 /* for setting the signal mask */// 設置阻塞信號集(信號屏蔽碼)。#define SIG_DFL ((void (*)(int))0) /* default signal handling */// 默認的信號處理程序(信號句柄)。#define SIG_IGN ((void (*)(int))1) /* ignore signal */// 忽略信號的處理程序。// 下面是sigaction 的數據結構。// sa_handler 是對應某信號指定要采取的行動。可以是上面的SIG_DFL,或者是SIG_IGN 來忽略// 該信號,也可以是指向處理該信號函數的一個指針。// sa_mask 給出了對信號的屏蔽碼,在信號程序執行時將阻塞對這些信號的處理。// sa_flags 指定改變信號處理過程的信號集。它是由37-39 行的位標志定義的。// sa_restorer 恢復過程指針,是用于保存原返回的過程指針。// 另外,引起觸發信號處理的信號也將被阻塞,除非使用了SA_NOMASK 標志。struct sigaction{ void (*sa_handler) (int); sigset_t sa_mask; int sa_flags; void (*sa_restorer) (void);};// 為信號_sig 安裝一個新的信號處理程序(信號句柄),與sigaction()類似。void (*signal (int _sig, void (*_func) (int))) (int);// 向當前進程發送一個信號。其作用等價于kill(getpid(),sig)。int raise (int sig);// 可用于向任何進程組或進程發送任何信號。int kill (pid_t pid, int sig);// 向信號集中添加信號。int sigaddset (sigset_t * mask, int signo);// 從信號集中去除指定的信號。int sigdelset (sigset_t * mask, int signo);// 從信號集中清除指定信號集。int sigemptyset (sigset_t * mask);// 向信號集中置入所有信號。int sigfillset (sigset_t * mask);// 判斷一個信號是否是信號集中的。1 -- 是, 0 -- 不是, -1 -- 出錯。int sigismember (sigset_t * mask, int signo); /* 1 - is, 0 - not, -1 error */// 對set 中的信號進行檢測,看是否有掛起的信號。int sigpending (sigset_t * set);// 改變目前的被阻塞信號集(信號屏蔽碼)。int sigprocmask (int how, sigset_t * set, sigset_t * oldset);// 用sigmask 臨時替換進程的信號屏蔽碼,然后暫停該進程直到收到一個信號。int sigsuspend (sigset_t * sigmask);// 用于改變進程在收到指定信號時所采取的行動。int sigaction (int sig, struct sigaction *act, struct sigaction *oldact);#endif /* _SIGNAL_H */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -