Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
C++ 在将SIGINT指向某个用户定义的处理程序一段时间后,如何将其重置为默认值?_C++_Signals - Fatal编程技术网

C++ 在将SIGINT指向某个用户定义的处理程序一段时间后,如何将其重置为默认值?

C++ 在将SIGINT指向某个用户定义的处理程序一段时间后,如何将其重置为默认值?,c++,signals,C++,Signals,我使用信号(SIGINT,我的\u处理程序)指向SIGINT指向my\u处理程序。一段时间后,我想将它重置为它通常指向的任何默认处理程序。如何执行此操作?将SIG_DFL作为func参数传递到signal()以重置默认行为: signal(SIGINT, SIG_DFL); 今天,建议使用 此外,它允许您在第一次调用自定义处理程序之前自动将信号处理程序重置为默认处理程序 SA_RESETHAND 如果设置,信号的处理应重置为SIG_DFL,并且 SA_SIGINFO标志应在进入信号处理器时清除

我使用
信号(SIGINT,我的\u处理程序)
指向
SIGINT
指向
my\u处理程序。一段时间后,我想将它重置为它通常指向的任何默认处理程序。如何执行此操作?

SIG_DFL
作为
func
参数传递到
signal()
以重置默认行为:

signal(SIGINT, SIG_DFL);
今天,建议使用

此外,它允许您在第一次调用自定义处理程序之前自动将信号处理程序重置为默认处理程序

SA_RESETHAND

如果设置,信号的处理应重置为
SIG_DFL
,并且
SA_SIGINFO
标志应在进入信号处理器时清除

注:
SIGILL
SIGTRAP
在交付时不能自动重置;系统 默默地执行此限制

否则,不得在进入现场时修改信号的配置 信号处理器

此外,如果设置了此标志,
sigaction()
的行为可能与
SA_NODEFER
国旗也被设置

定义一次性信号处理程序
#包括
#包括
action.sa_handler=我的_handler;
action.sa_flags=sa_RESETHAND;
if(sigaction(SIGINT,&action,NULL)=-1)
{
perror(“未能为SIGINT安装信号处理程序”);
}
如果信号处理程序不是使用sigaction的一次性处理程序,请参阅本文,了解如何将信号处理程序重置为默认处理程序:

考虑移植代码以使用它,这样可以保存旧的信号处理配置,并在以后正确地恢复它。
#include <signal.h>
#include <stdio.h>

action.sa_handler = my_handler;
action.sa_flags   = SA_RESETHAND;

if (sigaction(SIGINT, &action, NULL) == -1)
{
  perror("Failed to install signal handler for SIGINT");
}