程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> signal()函數說明

signal()函數說明

編輯:關於C語言

表頭文件#include<signal.h>
功 能:設置某一信號的對應動作
函數原型:void (*signal(int signum,void(* handler)(int)))(int);
或者:typedef void(*sig_t) ( int );
sig_t signal(int signum,sig_t handler);
參數說明:
第一個參數signum指明了所要處理的信號類型,它可以取除了SIGKILL和SIGSTOP外的任何一種信號。
第二個參數handler描述了與信號關聯的動作,它可以取以下三種值:
(1)一個無返回值的函數地址
此函數必須在signal()被調用前申明,handler中為這個函數的名字。當接收到一個類型為sig的信號時,就執行handler 所指定的函數。這個函數應有如下形式的定義:
void func(int sig);
sig是傳遞給它的唯一參數。執行了signal()調用後,進程只要接收到類型為sig的信號,不管其正在執行程序的哪一部分,就立即執行func()函數。當func()函數執行結束後,控制權返回進程被中斷的那一點繼續執行。
(2)SIG_IGN
這個符號表示忽略該信號,執行了相應的signal()調用後,進程會忽略類型為sig的信號。
(3)SIG_DFL
這個符號表示恢復系統對信號的默認處理。
函數說明:
signal()會依參數signum 指定的信號編號來設置該信號的處理函數。當指定的信號到達時就會跳轉到參數handler指定的函數執行。當一個信號的信號處理函數執行時,如果進程又接收到了該信號,該信號會自動被儲存而不會中斷信號處理函數的執行,直到信號處理函數執行完畢再重新調用相應的處理函數。但是如果在信號處理函數執行時進程收到了其它類型的信號,該函數的執行就會被中斷。
返回值:返回先前的信號處理函數指針,如果有錯誤則返回SIG_ERR(-1)。
下面的情況可以產生Signal:
按下CTRL+C產生SIGINT
硬件中斷,如除0,非法內存訪問(SIGSEV)等等
Kill函數可以對進程發送Signal
Kill命令。實際上是對Kill函數的一個包裝
軟件中斷。如當Alarm Clock超時(SIGURG),當Reader中止之後又向管道寫數據(SIGPIPE),等等


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved