本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
C declaration from standard signal Library
这是语法链接的参考。 我只了解函数指针的语法。 但这太复杂了,请解释。
http://www.cplusplus.com/reference/clibrary/csignal/signal/
我正在尝试了解给定的精确语法(一些我无法解决的指针混乱)。
您是否已阅读有关信号的Wiki?
另外,请更正您的帖子,链接未通过。
不要误会我的意思。 我正在投票关闭并查看dup,这是您问的:P
+1重复关闭。
在这里查看我的答案。
@John Bode很棒的答案!
signal()很容易理解,这是我在注释中提到的链接中的示例代码:
//This is a signal handling function. When your main program gets a signal, it
// will call this function. The function just prints a message.
static void catch_function(int signal) {
printf("Interactive attention signal caught.");
}
int main(void) {
//register to catch the interrupt signal.
if (signal(SIGINT, catch_function) == SIG_ERR) {
printf("An error occurred while setting a signal handler.
");
return EXIT_FAILURE;
}
while(1)
{
printf("do stuff
");
sleep(1);
}
}
现在,这段代码将永远循环(执行某些操作),直到获得^ C(ctrl + C)中断信号。在那个时间点,它将按照我们告诉它要做的一切去做:
mike@linux-4puc:~> ./a.out
do stuff
do stuff
^CInteractive attention signal caught.do stuff
do stuff
do stuff
do stuff
do stuff
^CInteractive attention signal caught.do stuff
信号功能定义为:
typedef void (*sighandler_t)(int); //this just means a pointer to a function
//that looks like: void sighandler(int)
sighandler_t signal(int signum, sighandler_t handler);
意思是:
指向处理信号的函数的指针可以称为" sighandler_t"
满足sighandler_t类型的函数无需返回任何内容,并采用int
然后,信号函数将捕获信号类型的参数,并使用满足" sighandler_t" typedef的函数。
然后在系统级别,当程序运行时,如果有信号进入并且我们已经对其进行处理,那么我们就会这样做,如果我们没有适当的处理,则操作系统会采取默认操作。
如果从上面的示例中删除信号调用,您将看到ctrl + C现在可以杀死程序,而不仅仅是允许信号处理程序运行。
回答你的问题?