我正在尝试使用 signal 函数(我知道它已被弃用并且它的可移植性存在很多问题但我不能使用 sigaction)。
我还需要使用 -ansi 和 -D_POSIX_C_SOURCE=200112L 进行编译
如果我使用这些标志之一进行编译,则信号只会工作一次。 请问如何在不使用 sigaction 的情况下使用这些标志获得相同的行为?
#include <signal.h>
#include <stdio.h>
static void signal_handler(int nbr)
{
(void)nbr;
puts("\nHi ! ");
}
int main(void)
{
signal(SIGINT, signal_handler);
puts("Hi ! ");
while (42);
return (0);
}
请注意,上面的代码包含一个无限循环。
谢谢:)
最佳答案
看起来您的系统具有 Unix/System V 信号机制,它会在第一个信号后将信号操作重置为 SIG_DFL。 所以你必须在信号处理程序本身中重新安装处理程序:
static void signal_handler(int nbr)
{
signal(SIGINT, signal_handler);
(void)nbr;
puts("\nHi ! ");
}
关于c - 信号处理不适用于 -ansi 或 POSIX define,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29100466/