【发布时间】:2020-05-29 05:49:39
【问题描述】:
void handler ( int sig, siginfo_t * info, void * se)
{
}
int setup_sig(){
struct sigaction sa;
sa.sa_sigaction = handler;
sa.sa_flags = SA_SIGINFO;
sigfillset(&sa.sa_mask);
if(-1 == sigaction(SIGCHLD, &sa , NULL)){return 0;} return 1;
}
void main()
{
printf("before\n");
setup_sig();
sleep(3);
printf("after\n");
}
这段代码需要注册给SIGCHLD发信号,然后休眠3秒,然后出去。
这段代码跳过睡眠指令,为什么?
【问题讨论】:
-
正确格式化和缩进的代码比你这里的更容易阅读和理解。
-
所以它不会等待 3 秒?
-
编译器应该拒绝
setup_sig();您不能从以void作为返回类型的函数返回值(另请参阅Reading parameter from file and creating filenames,它引用了标准的相关部分)。另外What shouldmain()return in C or C++? — 答案不是void,可能在 Windows 上除外。 -
我们是否可以让minimum, reproducible example 具有完整的标头、编译器标志、没有编译警告,以及您期望的行为与您观察到的行为的详细描述?像@user253751 一样,我不太明白你所说的睡眠“不起作用”或代码“跳过睡眠指令”是什么意思。