当前位置: 技术问答>linux和unix
sleep函数,信号
来源: 互联网 发布时间:2017-05-21
本文导语: #include #include #include void sig_alrm(int signo) { /* nothing to do */ } unsigned int mysleep(unsigned int nsecs) { struct sigaction newact, oldact; unsigned int unslept; newact.sa_handler = sig_alrm; sigemptyset(&newact.sa_mask); ...
#include
#include
#include
void sig_alrm(int signo)
{
/* nothing to do */
}
unsigned int mysleep(unsigned int nsecs)
{
struct sigaction newact, oldact;
unsigned int unslept;
newact.sa_handler = sig_alrm;
sigemptyset(&newact.sa_mask);
newact.sa_flags = 0;
sigaction(SIGALRM, &newact, &oldact);
alarm(nsecs);
pause();
unslept = alarm(0);
sigaction(SIGALRM, &oldact, NULL);
return unslept;
}
int main(void)
{
while (1)
{
mysleep(2);
printf("Two seconds passedn");
}
return 0;
}
以上程序没两秒输出一次Two seconds passed。但是如果我把信号处理函数sig_alrm注释掉,再把newact.sa_handler = sig_alrm;也注释掉。那么当程序受到信号后应该采取系统默认处理方式:结束掉当前进程。可是我运行时每到pause()函数就会永远挂起。。
|
我个人认为是这种情况下,相当于函数指针为 NULL
|
特意在ubuntu上运行下,可以2秒打印一次。