ctime----多线程不可重入
折腾了大半天,结果先放在最前面,ctime函数是不可重!不可重!不可重入的
多线程编程,最坑的地方就是函数的是否可重入,也就是它是否线程安全的,很多时候,一些奇奇怪怪的错误都是因为一些常用函数不可重入导致的。
今天出现的问题,一开始我的方向以为是printf() & fprintf()的可重入性导致的,网上都说这两个函数是不可重入的(网络结论,未做求证)
问题环境如下,一个多线程的项目中,调用这个函数打印log到文件
void
print_log(int device_id, int warning_level, char *string_info)
{
FILE *fp;
time_t curtime;
struct tm *info;
char filename[80];
char s[10] = ".vpn.log";
char *time_out;
int i;
time(&curtime);
info = localtime(&curtime);
strftime(filename, 80, "%Y%m%d", info);
strcat(filename, s);
time_out = ctime(&curtime);
for (i = 0; ; i++<