Linux c运行库中时间的相关函数(三)

13. int stime(const time_t *when)

头文件:#include

说明:该函数用于设置系统日期和时间,需要root权限,其内部实现是调用settimeofday。

返回值:成功返回0,失败返回-1,错误码存于errno

示例:

#include 
#include 
#include int main(int argc, char *argv[])
{int ret = -1;time_t t = 3600*2;time_t now = time(NULL);printf("System old time: %s\n", ctime(&now));ret = stime(&t);if (ret == 0) {now = time(NULL);printf("System new time: %s\n", ctime(&now));} else {printf("stime error, code: %d\n", errno);}return 0;
}

运行结果:

14. size_t strftime(char *s, size_t maxsize, const char *format, const struct tm *tp)

头文件:#include

说明:该函数主要用于格式化时间字符串,它根据format指向的字符串中格式命令把tp中保存的时间信息放在s指向的字符串中,最多向s中存放maxsize个字符。

返回值:返回储存到s的字符数。

示例:

#include 
#include int main(int argc, char *argv[])
{struct tm *p;char buf[128] = {0};time_t now = time(NULL);p=localtime(&now);printf("System now time: %s\n", asctime(p));strftime(buf, sizeof(buf), "Now is: %A %B %d %T %Y\n", p);printf("%s", buf);return 0;
}

运行结果:

15. char *strptime(const char *buf, const char *format, struct tm *tm)

头文件:#include

说明:该函数用于将特定时间格式字符串转换为tm时间类型。

返回值:成功返回指向此函数调用中未处理的第一个字符的指针,失败返回空指针

示例:

#include 
#include int main(int argc, char *argv[])
{struct tm timeinfo;char buf[] = "2020-1-6 18:00:00";char fmt[] = "%Y-%m-%d %H:%M:%S";if (strptime(buf, fmt, &timeinfo) != NULL) {printf("Format time: %s\n", asctime(&timeinfo));}return 0;
}

运行结果:

16. int clock_gettime(clockid_t clock_id, struct timespec *tp)

头文件:#include

说明:该函数可以根据clock_id,获取不同类型的精确时间(纳秒)。clock_id指定需要获取的时钟时间,常用的有4种时间:1)CLOCK_REALTIME,系统实时时间,随系统实时时间改变而改变(从UTC 1970-1-1 0:0:0开始计时);2)CLOCK_MONOTONIC,从系统启动时刻起开始计时,不受系统时间改变的影响,不能被设置;3)CLOCK_PROCESS_CPUTIME_ID,本进程启动后至当前所占用系统处理器的时间;4)CLOCK_THREAD_CPUTIME_ID,本线程启动后至当前所占用系统处理器的时间。

返回值:成功返回0,失败返回-1

示例:

#include 
#include // 返回自系统开机以来的秒数(tick)
unsigned long GetTickCount()
{struct timespec ts;clock_gettime(CLOCK_MONOTONIC, &ts);return (ts.tv_sec*1000 + ts.tv_nsec/1000000);
}int main(int argc, char *argv[])
{struct timespec t = {0, 0};clock_gettime(CLOCK_REALTIME, &t);printf("CLOCK_REALTIME: %ld, %ld\n", t.tv_sec, t.tv_nsec);clock_gettime(CLOCK_MONOTONIC, &t);printf("CLOCK_MONOTONIC: %ld, %ld\n", t.tv_sec, t.tv_nsec);clock_gettime(CLOCK_MONOTONIC_RAW, &t);printf("CLOCK_MONOTONIC_RAW: %ld, %ld\n", t.tv_sec, t.tv_nsec);clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t);printf("CLOCK_PROCESS_CPUTIME_ID: %ld, %ld\n", t.tv_sec, t.tv_nsec);clock_gettime(CLOCK_THREAD_CPUTIME_ID, &t);printf("CLOCK_THREAD_CPUTIME_ID: %ld, %ld\n", t.tv_sec, t.tv_nsec);printf("Time now %ld\n", time(NULL));printf("Tick count %lums\n", GetTickCount());return 0;
}

运行结果:

17. int clock_settime(clockid_t clock_id, const struct timespec *tp)

头文件:#include

说明:该函数主要用于设置系统时间,clock_id取值跟clock_gettime相同。

返回值:成功返回0,失败返回-1

示例:

#include 
#include 
#include int main(int argc, char *argv[])
{int ret = -1;struct timespec tpset;time_t now = time(NULL);printf("System old time: %s\n", ctime(&now));tpset.tv_sec = 3600*2;tpset.tv_nsec = 0;ret = clock_settime(CLOCK_REALTIME, &tpset);if (ret == 0) {now = time(NULL);printf("System new time: %s\n", ctime(&now));} else {printf("clock_settime error, code: %d\n", errno);}
}

运行结果:

18. clock_t clock(void)

头文件:#include

说明:该函数用于统计某个进程或函数占用处理器的时间。为了获取占用处理器所使用的秒数,需要除以CLOCKS_PER_SEC。不过一般使用gettimeofday替代。

返回值:成功返回自程序启动起,占用处理器时钟所使用的时间,失败返回-1

示例:

#include 
#include int main(int argc, char *argv[])
{double total = 0;clock_t t1, t2;t1 = clock();printf("t1=%ld\n", t1);for (int i=0; i< 10000000; i++) {;}t2 = clock();printf("t2=%ld\n", t2);total = (double)(t2 - t1)/CLOCKS_PER_SEC;printf("total time:%fs\n", total);return 0;
}

运行结果:

19. double difftime(time_t time1, time_t time0)

头文件:#include

说明:该函数用于计算time1和time0之间相差的秒数 (time1 - time0)。这两个时间均表示自纪元 Epoch(协调世界时 UTC:1970-01-01 00:00:00)起经过的秒数。

返回值:两个时间之间相差的秒数

示例:

#include 
#include 
#include int main(int argc, char *argv[])
{double diff;time_t start, end;time(&start);printf("start=%ld\n", start);sleep(5);time(&end);printf("end=%ld\n", end);diff = difftime(end, start);printf("Total time consuming=%f\n", diff);return 0;
}

运行结果:


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部