【发布时间】:2015-03-17 13:34:01
【问题描述】:
我正在尝试使用信号功能(我知道它已被弃用并且它的可移植性存在很多问题但我不能使用 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);
}
请注意,上面的代码包含一个无限循环。
谢谢:)
【问题讨论】:
-
请编辑您的问题,解释为什么您不能使用
sigaction;你真的应该,而且我看不出有任何理由不使用它! -
我不能因为学校的规定要求我们使用 signal() 系统调用!
-
顺便说一句,您不能也不应该在信号处理程序中使用
puts(因为它不是async-signal-safe-function)。阅读signal(7)