gpt4 book ai didi

c - Ubuntu 11.04 中的信号处理功能

转载 作者:行者123 更新时间:2023-11-30 17:54:53 25 4
gpt4 key购买 nike

我尝试在ubuntu中编写信号处理函数。代码如下:

   #include<signal.h>
void abc();

main(){

printf("Press Ctrl-z key to send SIGINT signal");
signal(SIGINT,abc);
for(;;);
}
void abc(){
printf("The key has been pressed");
}

有趣的因素是:a) 第一个 printf() 未显示b) 以及第二个 printf();

我从一本书上写了代码。谁能告诉我我犯了什么错误或者代码是否会针对 ubuntu 进行更改。

提前致谢。

最佳答案

stdout 是行缓冲的。

您可能希望将 \n 附加到传递给 printf() 的字符串:

printf("The key has been pressed.\n");
<小时/>

如果按下 Crtl-CSIGINT 将发送到在前台运行的进程。 SIGINT 的默认处理程序结束应用程序。

由于 OP 的应用程序为 SIGINT 安装了一个信号处理程序,该处理程序不会结束应用程序,因此如果按下 Ctrl-C ,它会继续运行,因此会出现 SIGINT 被引发。只要它保持安装状态,就会在 Ctl-C 上调用它。

要实现仅调用一次 abc() 的行为,请按如下方式修改信号处理程序:

void abc(int sig) /* 'sig' gets the signal nuber passed in (here: 'SIGINT') */
{
printf("The key has been pressed.\n");
signal(sig, SIG_DFT); /* (re-)sets the signal handler for `sig` to the default handler. */
}
<小时/>

进一步阅读:man signalman sigaction

关于c - Ubuntu 11.04 中的信号处理功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14692979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com