可能重复:
标准信号库中的 C 声明
这是对语法链接的参考。我只了解指向函数的指针的语法。但这太复杂了,请解释一下。
http://www.cplusplus.com/reference/clibrary/csignal/signal/
我试图理解给出的精确语法(一些我无法解决的指针混淆)。
可能重复:
标准信号库中的 C 声明
这是对语法链接的参考。我只了解指向函数的指针的语法。但这太复杂了,请解释一下。
http://www.cplusplus.com/reference/clibrary/csignal/signal/
我试图理解给出的精确语法(一些我无法解决的指针混淆)。
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.\n");
return EXIT_FAILURE;
}
while(1)
{
printf("do stuff\n");
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);
意思是:
然后在系统级别,当我们的程序运行时,如果有信号进来并且我们已经对其进行了处理,我们就会这样做,如果我们没有适当的处理,操作系统会采取默认操作。
如果您从上面的示例中删除信号调用,您会看到 ctrl+C 现在会杀死程序,而不是只允许信号处理程序运行。
回答你的问题?