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");
}