signal函數
時間:2017-11-14 來(lai)源:未知
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
功能:捕捉(zhuo)一個指(zhi)定的信(xin)號(hao),并作相(xiang)應的處理
參數:signum :要捕捉的信號
handler:SIG_IGN //忽(hu)略
SIG_DFL //執行(xing)默認操(cao)作
fun //執行相應的函(han)數代碼
返回:失敗(bai)返回SIG_ERR
注意:1、SIGKILL和(he)SIGSTOP不(bu)能(neng)被捕捉
2、signal是非(fei)阻塞函數,不會(hui)一直(zhi)等待指定信號的(de)產生
3、信號(hao)的(de)查(cha)看使用命令(ling) kill -1
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void fun(int sig)
{
if(sig == SIGINT)
{
puts("catch SIGINT");
}
}
int main(int argc, const char *argv[])
{
if(signal(SIGINT, fun) == SIG_ERR) //SIGINT信(xin)號的物理(li)按(an)鍵為(wei)ctrl+c
{ //當捕捉到ctrl+c后執行fun函數
perror("signal error");
exit(1);
}
if(signal(SIGTSTP, SIG_IGN) == SIG_ERR)
{ //SIGTSTP信號的物理按(an)鍵(jian)為ctrl+z
perror("signal error"); //當捕捉到ctrl+z后會忽略此信號
exit(1);
}
if(signal(SIGQUIT, SIG_DFL) == SIG_ERR)
{ //當捕(bu)捉(zhuo)到ctrl+\后(hou)會執行默認操作結束程序(xu)
perror("signal error"); //SIGQUIT信(xin)號的物理按鍵為ctrl+\
exit(1);
}
puts("signal"); //signal是非阻塞函數,所以puts會(hui)立即打印輸出
while(1);
return 0;
}

