C-向服务器写log | time库函数研究

代码如下:

#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结构体的指针,完成格式化字符串。














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值