Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
那么';sigaction()和signal()之间的区别是什么?_C_Signals - Fatal编程技术网

那么';sigaction()和signal()之间的区别是什么?

那么';sigaction()和signal()之间的区别是什么?,c,signals,C,Signals,可能重复: 在我看来,它们都可以用于注册特定信号的回调 您如何选择使用哪一个?TLPI UNIX系统提供了两种 更改信号的配置: signal()和sigaction()。这个 sigaction()系统调用是一个 用于设置的信号()的替代方案 信号的处理。虽然 sigaction()稍微复杂一些 要使用than signal(),则返回它 提供更大的灵活性 sigaction也比signal更便于携带。另外,使用sigaction可以指定接收附加参数的信号处理程序(sa_sigaction与

可能重复:

在我看来,它们都可以用于注册特定信号的回调

您如何选择使用哪一个?

TLPI

UNIX系统提供了两种 更改信号的配置:
signal()
sigaction()
。这个 sigaction()系统调用是一个 用于设置的信号()的替代方案 信号的处理。虽然 sigaction()稍微复杂一些 要使用than signal(),则返回它 提供更大的灵活性

sigaction
也比
signal
更便于携带。另外,使用
sigaction
可以指定接收附加参数的信号处理程序(
sa_sigaction
sa_处理程序

TLPI

UNIX系统提供了两种 更改信号的配置:
signal()
sigaction()
。这个 sigaction()系统调用是一个 用于设置的信号()的替代方案 信号的处理。虽然 sigaction()稍微复杂一些 要使用than signal(),则返回它 提供更大的灵活性

sigaction
也比
signal
更便于携带。另外,使用
sigaction
可以指定接收附加参数的信号处理程序(
sa_sigaction
sa_处理程序


在我看来,区别(除了接口:)和可移植性)在于信号被捕获后的行为:

如果将配置设置为函数,则首先要么将配置重置为SIG_DFL,要么阻止信号(请参见下面的可移植性),然后使用参数signum调用处理程序。如果对处理程序的调用导致信号被阻塞,那么从处理程序返回时信号将被解除阻塞

另外,我想重复一下手册上的内容:

signal()的行为在不同的Unix版本中有所不同,在不同的Linux版本中历史上也有所不同。避免使用:改用sigaction(2)


在我看来,区别(除了接口:)和可移植性)在于信号被捕获后的行为:

如果将配置设置为函数,则首先要么将配置重置为SIG_DFL,要么阻止信号(请参见下面的可移植性),然后使用参数signum调用处理程序。如果对处理程序的调用导致信号被阻塞,那么从处理程序返回时信号将被解除阻塞

另外,我想重复一下手册上的内容:

signal()的行为在不同的Unix版本中有所不同,在不同的Linux版本中历史上也有所不同。避免使用:改用sigaction(2)

..
/* can be installed by signal / sigaction */
void(*) (int);

/* can be installed by sigaction only */
void(*) (int, siginfo_t *, void *);