alarm是内核以API形式提供的闹钟,时间到了会自动干一个什么事情
系统延时抛出一个SIGALRM信号
如果传0进去会把alarm都注销掉
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void func(int sig)
{
if(sig == SIGALRM)
{
printf("SIGALRM happened.\n");
}
}
int main(void)
{
unsigned int ret = 0;
signal(SIGALRM, func);
ret = alarm(5);
printf("ret = %d.\n", ret);
sleep(7);
return 0;
}
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void func(int sig)
{
if(sig == SIGALRM)
{
printf("SIGALRM happened.\n");
}
}
int main(void)
{
unsigned int ret = 0;
signal(SIGALRM, func);
ret = alarm(5);
printf("ret = %d.\n", ret);
sleep(7);
return 0;
}
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void func(int sig)
{
if(sig == SIGALRM)
{
printf("SIGALRM happened.\n");
}
}
int main(void)
{
unsigned int ret = 0;
int sigact_ret = -1;
struct sigaction sigact_t = {0};
sigact_t.sa_handler = func;
//signal(SIGALRM, func);
sigact_ret = sigaction(SIGALRM, &sigact_t, NULL);
ret = alarm(5);
printf("1st ret = %d.\n", ret);
sleep(1);
ret = alarm(5);
printf("2nd ret = %d.\n", ret);
sleep(2);
ret = alarm(5);
printf("3rd ret = %d.\n", ret);
sleep(10);
return 0;
}