time.h文件中包含的几个函数使用时须注意事项

time.h头文件中包含以下函数

char* asctime(const struct tm *tm);

char* asctime_r(const struct tm *tm,char *buf);

char* ctime(const time_t *timep);

char* ctime_r(const time_t *timep,char *buf);

struct tm *gmtime(const time_t *timep);

struct tm *gmtime_r(const time_t *timep,struct tm *result);

struct tm *localtime(const time_t *timep);

struct tm *localtime_r(const time_t *timep,struct tm *result);

time_t mktime(struct tm *tm);

上面类似的函数基本都有两个,一个不带_r,另一个不带_r,在写代码的时候,经常会用到读取系统时间的函数。很多人都会调用localtime函数来将时间转换本地时间,但是大家往往会忽略了一点,localtime函数不是线程安全的。如果在多线程里调用localtime函数,很可能会出现问题。

struct tm *localtime(const time_t *timep);

这个函数在返回的时候,返回的是一个指针,实际的内存是localtime内部通过static申请的静态内存,所以通过localtime调用后的返回值不及时使用的话,很有可能被其他线程localtime调用所覆盖掉,所以多线程应用里面,应该用localtime_r函数替代localtime函数,因为localtime_r是线程安全的。

上面其它函数也是类似的,多线程使用时要特别注意。

时间: 2024-10-13 17:15:10

time.h文件中包含的几个函数使用时须注意事项的相关文章

如何在Qt资源文件中包含exe等各种类型文件?

操作系统:Windows 10 X64 企业版 Qt: 5.8.0 QtCreater: 4.2.1 刚刚开始学习Qt,不断遇到困难和挑战,前几天在各个QQ群里询问如何在Qt的资源文件中包含和释放exe可执行文件,结果没有谁给我一个准确的答复,包括问写过图书的选手!!我现在非常鄙视写书的选手,是高傲还是为了面子,对于我的问题根本就不回答!!!不仅仅是一个写书选手这样,很多个!!!我相信很多作者都是乐于帮助别人,极少数人才这个德性!!!! Qt做为开发了这么多年的跨平台GUI开发解决方案,我相信这

C语言头文件中包含的函数

math.h常用函数 int  abs   (int x); double  acos  (double x); double  asin  (double x); double  atan  (double x); double  atan2 (double y, double x); double  atof  (const char *s); double  ceil  (double x); double  cos   (double x); double  cosh  (double

在.cpp文件中定义变量,在.h文件中extern

在cocos2d-x 的D:\phoneclient\cocos2dxlib\cocos\base\CCValue.h 文件中,发现如下代码: 全局查找之后,在D:\phoneclient\cocos2dxlib\cocos\base\CCValue.cpp 文件中,找到变量的定义: extern int a;//这是声明aint a;//这是定义a正常情况下都是h声明cpp定义. 声明和定义是不同的,声明可以有多次,定义只能有一次.h文件可能被很多cpp文件包含,所以里面只能写声明不能写定义,

delegate 集成在类中,还是单独写在.h文件中?

转:http://stackoverflow.com/questions/11382057/declaring-a-delegate-protocol There definitely are subtle differences. If the protocol you are talking about is a delegate that is used by one particular class, for example, MySpecialViewController, and M

老男孩教育每日一题-2017年4月13日-当你删除的多个文件中包含空格或其他特殊字符,请问如何做

当你删除的多个文件中包含空格或其他特殊字符,请问如何做 创建测试环境: mkdir -p  /oldboy/0413 cd   /oldboy/0413 touch oldboy" "{01..10}.log 别上来就rm -f oldboy*.log哟.

string.h文件中函数用法

下面为string.h文件中函数的详细用法: strcpy函数名:strcpy功 能: 拷贝一个字符串到另一个用 法: char *strcpy(char *destin, char *source); strncpy函数名:strncpy原型:char *strncpy(char *dest, char *src,size_tn);功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针.

处理文件,用户指定要查找的文件和内容,讲文件中包含要查找内容的每一行都要输出到屏幕

处理文件,用户指定要查找的文件和内容,讲文件中包含要查找内容的每一行都要输出到屏幕: 预先有一个名为 cars.py 的文件,其内容为: cars = ['honda','yamaha','suzuki'] print(cars) cars[0] = 'ducati' print(cars) cars.append('马大哈') print(sorted(cars)) print(cars) 接下来写生成代码: def check_file(): # 创建一个名为 check_file 的生成器

cuda编程:不要在一个cpp文件中声明__device__和__global__函数

比如一下代码是正常的: kernel.h extern __global__ void kernel(); kernel.cu #include <stdio.h> #include "kernel.h" __global__ void kernel() { printf("hello world!"); } test.cu #include "kernel.h" int main(void) { kernel<<<

shell 脚本---每隔几个小时查看日志文件中包含某些字符串的行数

在linux生产环境下,有如下这样的一个平常运维需要的工作. 每隔一段时间,比如两个小时,就要对每秒都要产生日志的日志文件(这里假设为testfile.out,其绝对路径为/home/panlm/shellpra/testfile.out)进行一个操作,这个操作是将日志中包含某些字符串的行给单独打印出来,并重新放在一个文件(这里的文件假设为out.log)中.这些需要匹配的字符串可以按这种方式表示"0x216000ab"其中ab为01到18的连续整数. 实现这样一个要求的做法主要有两步