signal()是一種系統(tǒng)調(diào)用,用于通知運行時系統(tǒng),當(dāng)某種特定的“軟件中斷”發(fā)生時調(diào)用特定的程序。它的真正的名字應(yīng)該是“Call_that_routine_when_this_interrupt_Comes_in(當(dāng)該中斷發(fā)生時調(diào)用那個程序)”,調(diào)用signal()函數(shù),并通過參數(shù)傳遞告訴它終端類型以及用于處理中斷的程序。
成都創(chuàng)新互聯(lián)作為成都網(wǎng)站建設(shè)公司,專注重慶網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,有關(guān)成都企業(yè)網(wǎng)站定制方案、改版、費用等問題,行業(yè)涉及成都人造霧等多個領(lǐng)域,已為上千家企業(yè)服務(wù),得到了客戶的尊重與認(rèn)可。
ANSIC 標(biāo)準(zhǔn)中,signal()函數(shù)的聲明如下:
void (*signal (int sig ,void (*func)(int))) (int) ;
signal是一個函數(shù),他返回一個函數(shù)指針,后者所指向的函數(shù)接受一個int參數(shù)并返回void 。
exit()通常是用在子程序中用來終結(jié)程序用的,使用后程序自動結(jié)束,跳回操作系統(tǒng)。
在c語言中: exit(0):表示正常退出;exit(1):表示異常退出,這個1是返回給操作系統(tǒng);值是返回操作系統(tǒng)的:0是正常退出,而其他值都是異常退出,所以我們在設(shè)計程序時,可以在推出前給一些小的提示信息,或者在調(diào)試程序的過程中查看出錯原因。
使用exit()時,可以不論main()的返回值類型,它的頭文件是 stdlib.h。
擴(kuò)展資料:
進(jìn)程函數(shù):所在函數(shù)庫為stdlib.h、process.h
void abort() 此函數(shù)通過調(diào)用具有出口代碼3的_exit寫一個終止信息于stderr,并異常終止程序 無返回值。
void _exit(int status)終止當(dāng)前程序,但不清理現(xiàn)場。
void exit(int status) 終止當(dāng)前程序,關(guān)閉所有文件,寫緩沖區(qū)的輸出(等待輸出),并調(diào)用任何寄存器的"出口函數(shù)",無返回值。
參考資料:百度百科-C語言函數(shù)
signal(SIGALRM, alarmhandle); 表示給當(dāng)前進(jìn)程注冊SIGALRM信號處理代碼,如果收到SIGALRM信號,就會去執(zhí)行alarmhandle函數(shù)
$?man?signal
...
SYNOPSIS
#include?signal.h
typedef?void?(*sighandler_t)(int);
sighandler_t?signal(int?signum,?sighandler_t?handler);
DESCRIPTION
The??signal()?system?call?installs?a?new?signal?handler?for?the?signal?with?number?signum.??The?signal?handler?is?set?to?sighandler?which?may?be?a?user?specified?function,?or?either?SIG_IGN?or?SIG_DFL.
signal()函數(shù)是個系統(tǒng)調(diào)用,該函數(shù)按signum設(shè)定一個新的信號處理句柄(函數(shù)).新設(shè)定的處理函數(shù)可以是用戶自定義的函數(shù),也可以是系統(tǒng)指定的SIG_IGN?或?SIG_DFL.
參考代碼:
#include?signal.h
#include?unistd.h
#include?stdio.h
#include?stdlib.h
void?alarmhandle(int?sig)
{
printf("recv?sig:%d\n",?sig?);
printf("exit!\n");
exit(0);
}
int?main()
{
signal(?SIGALRM,?alarmhandle?);
printf("begin...\n");
alarm(5);?//定時器,用于在5秒后產(chǎn)生SIGALRM信號
while(?1?);
return?0;
}
運行結(jié)果:
begin...
recv sig:14
exit!
信號是程序執(zhí)行過程中出現(xiàn)的異常情況。它可能是由程序中的錯誤造成的,例如引用內(nèi)存中的一個非法地址;或者是由程序數(shù)據(jù)中的錯誤造成的,例如浮點數(shù)被0除;或者是由外部事件引發(fā)的,例如用戶按了Ctrl+Break鍵。
你可以利用標(biāo)準(zhǔn)庫函數(shù)signal()指定要對這些異常情況采取的處理措施(實施處理措施的函數(shù)被稱為“信號處理函數(shù)”)。signal()的原型為:
#include signal.h
void(*signal(int hum,void(*func)(int)))(int);
如果定義一個typedef,理解起來就容易一些了。下面給出的sigHandler_t類型是指向一個程序的指針,該函數(shù)有一個int類型的參數(shù),并且返回一個void類型:
typedef void(*sigHandler_t)(int);
sigHandler_t signal(int num , sigHandler_t func);
signal()有兩個參數(shù),分別為int類型和sigHandler_t類型,其返回值為sigHandler_t類型。以func參數(shù)形式傳遞給signal()的那個函數(shù)將成為第num號異常情況的新的信號處理函數(shù)。signal()的返回值是信號hum原來的信號處理函數(shù)。在設(shè)置了一個暫時的信號處理函數(shù)之后,你可以利用該值恢復(fù)程序先前的行為。num的可能值依賴于系統(tǒng),并且在signal.h中列出。func的可能值可以是你的程序中的任意函數(shù),或者是SIG_DFL和SLG_IGN這兩個特別定義的值之一。SIG_DFL是指系統(tǒng)的缺省處理措施,通常是暫停執(zhí)行程序;SIG_IGN表示信號將被忽略。
當(dāng)前標(biāo)題:c語言信號處理函數(shù) C語言信號量
文章轉(zhuǎn)載:http://www.chinadenli.net/article10/dodoedo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、搜索引擎優(yōu)化、微信小程序、App開發(fā)、定制開發(fā)、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)