雖然過去了好多年,但我仍然清楚地記得自己第一次看到signal函數原型時的驚訝。
學習UNIX環境C編程的朋友都知道,信號是繞不過去的一道坎,而信號處理的第一重要函數就是signal()。
什麼都不說了,直接上菜:
<code>#include <signal.h>
void (*signal(int signo, void (*func)(int)))(int);/<signal.h>/<code>
看到這個函數原型,您知道signal()函數怎麼用嗎?
說明一下,這個函數聲明沒有寫錯,而且符合ANSI C語法。
當然,經過長達10分鐘的仔細分析後,對大部分C語言程序員來說,signal的函數聲明還是可以看懂:
(1)signal是一個函數;
(2)函數有兩個參數,函數有返回值;
(3)第一個參數為int類型;
(4)第二個參數為函數指針,並且函數指針對應的函數有一個參數,為int類型;
(5)signal的返回類型為函數指針,並且函數指針對應的函數有一個參數,為int類型。
可能是這個聲明太燒腦了,現在Linux中對signal函數這樣解釋:
在Linux命令行中,輸入man signal命令,得到下面的信息:
<code>NAME
signal - ANSI C signal handling
SYNOPSIS
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);/<signal.h>/<code>
這樣的聲明,基本上C語言程序員都能看懂了。
如果您看到最上面的signal函數聲明,有點頭暈,非常抱歉,就當剛剛喝了一杯茅臺酒吧
謝謝您的閱讀!
閱讀更多 編程實踐 的文章