C语言 什么是信号功能(SIGINT)?

fafcakar  于 2023-04-19  发布在  其他
关注(0)|答案(4)|浏览(203)

下面这句话是做什么的?如果有人能解释一下这个功能,我将不胜感激。

signal(SIGINT, SIG_DFL);
nhhxz33t

nhhxz33t1#

SIGINT是中断信号,当你按Ctrl+C时会触发。它的默认行为是终止进程。SIGINT信号可以被处理,这意味着你可以改变默认行为(通过调用sighandler,或设置它SIG_IGN)。
现在,一旦动作被改变,你想再次设置它这个信号的默认行为,那么你应该写

signal(SIGINT, SIG_DFL);

它将再次更改信号的默认行为(即终止进程)。

up9lanfz

up9lanfz2#

将SIGINT信号的处理设置为默认值。
如果你使用的是 *nix系统,可以试试man signal来得到这样的答案(也许还可以查看“另请参阅”下面列出的一些页面),这样也会告诉你什么是信号。
至于默认值是什么-它将是“忽略它”,“终止程序”或“导致程序转储核心”之一。这取决于特定的信号,我不记得SIGINT的默认值,对不起。

a6b3iqyw

a6b3iqyw3#

您所写的行将中断信号的信号处理程序更改回默认值

void myInterruptHandler (int signum) { 
    printf("You pressed ctrl+c, but I don't care\n");
 }

int main(){
  sighandler_t oldHandler = signal(SIGINT, myInterruptHandler);
  while(true){
    printf("Ctrl + C can't kill me!!\n");
    sleep(1000);
  }
  //Change back to the old handler
  signal(SIGINT, oldHandler);
  //alternatively:  signal(SIGINT, SIG_DFL);
}
vu8f3i0k

vu8f3i0k4#

它设置SIGINT的默认操作,如下面的手册页所述;
Linux信号手册页;

sighandler_t signal(int signum, sighandler_t handler);

signal()函数将信号signum的配置设置为handler,它可以是SIG_IGN、SIG_DFL或程序员定义函数的地址。

  • 如果处置被设置为SIG_IGN,则信号被忽略。
  • 如果处置被设置为SIG_DFL,则发生与信号相关联的默认动作。

相关问题