函数中的 Sigaction 声明

Sigaction declaration in functions

Unix 中的 sigaction 是否只在 main 函数中声明一次,或者我应该在我的 main 调用的每个函数中声明它,所以如果执行不在我的 main,信号处理程序将调用?那么,我只需要在 main() 的开头声明一次 sigaction 还是我必须在每个函数中声明它?

您不必在每个函数中调用 sigaction()。它为给定信号设置一个(全局)信号处理程序,该信号处理程序一直是信号处理程序,直到您更改它——通过对同一信号的另一个调用 sigaction()。您可以在 main() 中调用 sigaction(),但这也不是必须的。您可以在选定的其他功能中调用它。

请注意,您需要为每个要处理或忽略的不同信号调用一次 sigaction()。调用循环信号列表的函数,为每个信号设置适当的处理程序通常是有益的。谢天谢地,您不必在调用的每个函数中都这样做!

一般来说,避免在同一程序中混合调用 signal()sigaction()。如果您在任何地方使用 sigaction(),请在任何地方使用它。但是,如果你非要变态,那么你可以在我只提到sigaction().

的第一段中使用“sigaction()signal()

请注意,您可以使用 sigaction() 了解信号的处理方式,而无需设置新的信号处理。使用 signal() 您可以(或多或少)了解信号是如何处理的,但您还必须设置一个动作。比 signal() 更喜欢 sigaction() 的另一个原因。

请注意,我假设问题中的 'declare' 以某种形式表示 'call'。您不在任何函数中声明 sigaction();你包括 <signal.h> 来声明它。