函数中的 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>
来声明它。
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>
来声明它。