时间获取
秒级:
获取从1970-01-01 00:00:00以来的相隔秒数
#include <time.h>
time_t time(time_t *tloc);
参数:
tloc:设为NULL就行了
返回值:
成功:秒数
失败:-1
可把time()得到的秒数变成一个struct tm结构体所表示的时间,结构体时间对应的是本地时间
struct tm *localtime_r(const time_t *timep, struct tm *result);
参数:
timep:需要进行转换的时间变量指针,可通过time()获取得到。
result:转换后用于存储信息的结构体指针
返回值:
成功:和参数result指针一样;
失败:NULL
struct tm
{
int tm_sec; /* 秒(0-60) */
int tm_min; /* 分(0-59) */
int tm_hour; /* 时(0-23) */
int tm_mday; /* 日(1-31) */
int tm_mon; /* 月(0-11) */
int tm_year; /* 年(这个值表示的是自1900年到现在经过的年数) */
int tm_wday; /* 星期(0-6, 星期日Sunday = 0、星期一=1…) */
int tm_yday; /* 一年里的第几天(0-365, 1 Jan = 0) */
int tm_isdst; /* 夏令时 */
};
使用方法:
struct tm t;
time_t sec = time(NULL);
if (-1 == sec)
{
perror("time error");
exit(-1);
}
localtime_r(&sec, &t);
定时器
信号定时器
#include <unistd.h>
设置信号定时器。当定时时间到,内核会向进程发送SIGALRM信号
unsigned int alarm(unsigned int seconds);
参数:
seconds:定时时间,以秒为单位;如果等于0,则表示取消之前设置的alarm闹钟
返回值:
调用alarm()时,之前已设置有alarm闹钟并还没有超时,则之前闹钟的剩余值为返回值
并且之前设置的闹钟使劲按被新的替代
返回0则代表正常情况
Ps:
alarm闹钟不能循环触发,只能触发一次
要实现循环触发,可以在SIGALRM信号处理函数中再次调用alarm()函数设置定时器