代码如下:
#include <stdio.h>
#include <time.h>
void write_log(char *log_str) {
FILE *file;
file = fopen("/var/log/xxx/gearman_c_worker.log","a+");
char time_buff[20];
struct tm *sTm;
time_t now = time(0);
sTm = gmtime(&now);
strftime(time_buff, sizeof(time_buff), "%Y-%m-%d %H:%M:%S", sTm);
fprintf(file,"%s %s\n",time_buff, log_str); /*writes*/
fclose(file);
}
int main() {
char *log = "hello, world!";
write_log(log);
return 0;
}
样例输出:
2014-07-01 11:31:42 hello, world!
--------------------
研究下时间是怎么打印出来的,从后往前看:
1)strftime()函数:
函数声明:
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm)
参数说明:
s: 最后格式化成的时间字符串,上面程序中的time_buff
max:字符最大个数
format: 格式化字符串
tm: 输入的指向struct tm结构体的指针, 上面程序中的sTm
struct tm结构体:
struct tm { int tm_sec; /* seconds, range 0 to 59 */ int tm_min; /* minutes, range 0 to 59 */ int tm_hour; /* hours, range 0 to 23 */ int tm_mday; /* day of the month, range 1 to 31 */ int tm_mon; /* month, range 0 to 11 */ int tm_year; /* The number of years since 1900 */ int tm_wday; /* day of the week, range 0 to 6 */ int tm_yday; /* day in the year, range 0 to 365 */ int tm_isdst; /* daylight saving time */ };
2)gmtime()函数:
函数声明:
struct tm *gmtime(const time_t *timep)
接受一个指向time_t类型的指针, 上面程序中的&now
返回执行struct tm结构体的指针。
3).time()函数
函数声明:
time_t time(time_t * t)
接受一个指向time_t 类型的指针, 并返回time_t类型。
time(0) 或time(NULL)返回当前时间的time_t结构,其实就是当前时间的UNIX时间戳(以秒为单位)
上例中 time_t now = time(0)其实就是取得了当前时间的UNIX时间戳。
----------
好了,现在思路理清了,正向来:
1)用time()去得当前时间的UNIX时间戳,time_t类型
2)gmtime()函数接受一个指向time_t的指针,返回一个指向struct tm结构体的指针
3)strftime()接收指向struct tm结构体的指针,完成格式化字符串。