signal()函数返回的函数指针有什么作用?

3

所以,到目前为止,我已经多次使用过signal()函数,尽管我并不知道这个函数的声明实际上是什么样的。我发现这个函数返回一个函数指针:

void (*signal(int sig, void (*func)(int)))(int)

这个指针指向前一个信号处理程序。好的,但这有什么用呢?是否有人使用此返回指针?您能描述一个使用该返回值有用的示例吗?

2
如果您想稍后恢复先前的处理程序,这可能很有用。这也是检查信号当前是否被忽略的一种可能方式。 - Some programmer dude
2
你还可以实现级联信号处理程序 - tofro
1个回答

3
这是一种通用的设置全局值的模式。在设置新值的同时,旧值(在这种情况下是处理程序指针)也会被返回。
这使得更改可以是临时的。因此,您可以恢复内置的处理程序,而不需要强制实现通过名称将该函数暴露给您。
尽管在这种情况下,API确实提供了一种方式让您通过“SIG_DFL”宏设置默认值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接