gpt4 book ai didi

c - 信号处理不适用于 -ansi 或 POSIX define

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:42 25 4
gpt4 key购买 nike

我正在尝试使用 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/

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