这就里面的参数已经很详尽也很简单了
所以不需要你再去做其它的事情,只要填充这个结构就可以了
当然如果你非要用以上概述的方法来完成任务的其实也很简单
只需要将以上的内容填充到这个结构体然后再调用mktime函数就可以了
下面我给个简单的实现可以参考下,然后根据自己的实际情况再做些修改
void settime(unsigned char *buf,int buf_len){struct tm t int year=0memset(&t,0,sizeof(t)) memcpy(&year,buf,2)//前两个字节为年份year-=1900//struct sm结构中年份是以1900年开始计算的 t.tm_year=year t.tm_mon=(int)buf[2]-1 t.tm_mday=(int)buf[3] t.tm_hour=(int)buf[4] t.tm_min=(int)buf[5] t.tm_sec=(int)buf[6]if(mktime(&t) == -1) //设置时间perror("mktime")}
首先看看time的原型:
time_t
time(time_t
*calptr)
//其说明是:若成功则返回时间值,否则返回-1。时间值总是作为
函数值
返回。如果参数不为空(NULL),则时间值也存放在由calptr指向的单元内。(看似的确多余的,仅仅是看似~~)
第二个函数的原型:
struct
tm
*
localtime
(const
time_t
*calptr)//看到了把~参数是指针,所以必须要传递地址,&t取地址。
(顺带提一下~localtime是将
日历时间
转换成本地时间,会考虑到本地时区和
夏时制
标志,而与此类似的一个函数gmtime则是将日历时间转换成
国际标准时间
)
原文地址: https://blog.csdn.net/weibo1230123/article/details/79139476
sleep()非系统调用,sleep()是在库函数中实现的,它是通过alarm()来设定报警时间,使用sigsuspend()将进程挂起在信号SIGALARM上。
sleep()只能精确到秒级上。sleep()会令目前的进程暂停,直到达到参数seconds 所指定的时间,或是被信号所中断。
return:若进程暂停到参数seconds 所指定的时间,成功则返回0,若有信号中断则返回剩余秒数。
除了时间单位为微秒以外,在使用上与sleep()差不多。还有就是实现也是不同的,sleep因为是用alarm实现的,所以时间单位为s ,而usleep的时间单位为us
,那肯定不是由alarm实现的,所以说它们的实现不同,但都是linux用的,而window下不能用,因为都是sleep和usleep都是在unistd.h下定义的。
return:若进程暂停到参数seconds 所指定的时间,成功则返回0,若有信号中断则返回剩余微秒数。
这个函数功能是暂停某个进程直到你规定的时间后恢复,参数req就是你要暂停的时间,其中req->tv_sec是以秒为单位,而tv_nsec以毫微秒为单位(10的-9次方秒)。由于调用nanosleep是是进程进入TASK_INTERRUPTIBLE,这种状态是会相应信号而进入TASK_RUNNING状态的,这就意味着有可能会没有等到你规定的时间就因为其它信号而唤醒,此时函数返回-1,切还剩余的时间会被记录在rem中。
return: 若进程暂停到参数 req所指定的时间,成功则返回0,若有信号中断则返回-1,并且将剩余微秒数记录在 rem中。
unistd.h 是 unix 系统标准头文件,用于系统调用,相当于win32中的windows.h,unistd.h 定义的函数只能用于UNIX环境中,而不能用于windows。所以sleep 和 usleep 只能用于linux下,而不能用于windows 。
nalosleep 和 其它时间日期 *** 作函数一样都是定义在time.h中的,所以都适用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)