/*
sleep函數幾點說明
1)sleep函數作用,讓進程睡眠。
2)能被信號打斷,然後處理信號函數以後,就不再睡眠了。直接向下執行代碼
3)sleep函數的返回值,是剩餘的秒數
*/
void handler(int num)
{
printf("recv num:%d \n", num);
if (num == SIGQUIT)
{
}
}
#if 1
void test()
{
int n = 100;
pid_t pid;
printf("main ....begin\n");
signal(SIGINT, handler);
sleep(n);
printf("sleep ....結束\n");
}
#endif
#if 0
void test()
{
int n = 100;
printf("main ....begin\n");
signal(SIGINT, handler);
do
{
n = sleep(n);
if(n != 0){
printf("還剩餘 %d 秒, 要給睡夠。。。。。\n", n);
}else{
printf("TMD,終於睡醒了。。。。。。\n");
}
} while(n > 0);
printf("sleep ....結束\n");
}
#endif
int main(void)
{
test();
return 0;
}
#if 1
void sig_alrm(int signo)
{
printf("收到SIGALRM 信號\n");
}
unsigned int sleep1(unsigned int seconds)
{
if(signal(SIGALRM, sig_alrm) == SIG_ERR){
return seconds;
}
printf("set seconds = %d, but 返回值是 %d\n",seconds, alarm(seconds));
pause();
return (alarm(0));
}
void test()
{
int ret = 0;
ret = sleep1(7);
printf("剩餘的秒數:%d\n", ret);
}
#endif
int main(void)
{
test();
return 0;
}