C语言实现写入日志文件

C语言实现写入日志文件

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #ifdef WIN32
  6. #include <windows.h>
  7. #else
  8. #include <unistd.h> // linux下头文件
  9. #endif
  10. #define FILE_MAX_SIZE (1024*1024)
  11. /*
  12. 获得当前时间字符串
  13. @param buffer [out]: 时间字符串
  14. @return 空
  15. */
  16. void get_local_time(char* buffer)
  17. {
  18. time_t rawtime;
  19. struct tm* timeinfo;
  20. time(&rawtime);
  21. timeinfo = localtime(&rawtime);
  22. sprintf(buffer, "%04d-%02d-%02d %02d:%02d:%02d",
  23. (timeinfo->tm_year+1900), timeinfo->tm_mon, timeinfo->tm_mday,
  24. timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
  25. }
  26. /*
  27. 获得文件大小
  28. @param filename [in]: 文件名
  29. @return 文件大小
  30. */
  31. long get_file_size(char* filename)
  32. {
  33. long length = 0;
  34. FILE *fp = NULL;
  35. fp = fopen(filename, "rb");
  36. if (fp != NULL)
  37. {
  38. fseek(fp, 0, SEEK_END);
  39. length = ftell(fp);
  40. }
  41. if (fp != NULL)
  42. {
  43. fclose(fp);
  44. fp = NULL;
  45. }
  46. return length;
  47. }
  48. /*
  49. 写入日志文件
  50. @param filename [in]: 日志文件名
  51. @param max_size [in]: 日志文件大小限制
  52. @param buffer [in]: 日志内容
  53. @param buf_size [in]: 日志内容大小
  54. @return 空
  55. */
  56. void write_log_file(char* filename,long max_size, char* buffer, unsigned buf_size)
  57. {
  58. if (filename != NULL && buffer != NULL)
  59. {
  60. // 文件超过最大限制, 删除
  61. long length = get_file_size(filename);
  62. if (length > max_size)
  63. {
  64. unlink(filename); // 删除文件
  65. }
  66. // 写日志
  67. {
  68. FILE *fp;
  69. fp = fopen(filename, "at+");
  70. if (fp != NULL)
  71. {
  72. char now[32];
  73. memset(now, 0, sizeof(now));
  74. get_local_time(now);
  75. fwrite(now, strlen(now)+1, 1, fp);
  76. fwrite(buffer, buf_size, 1, fp);
  77. fclose(fp);
  78. fp = NULL;
  79. }
  80. }
  81. }
  82. }
  83. int main(int argc,char** argv)
  84. {
  85. int i;
  86. for (i=0; i<10; ++i)
  87. {
  88. char buffer[32];
  89. memset(buffer, 0, sizeof(buffer));
  90. sprintf(buffer, "====> %d\n", i);
  91. write_log_file("log.txt", FILE_MAX_SIZE, buffer, strlen(buffer));
  92. #ifdef WIN32
  93. Sleep(100); // 毫秒
  94. #else
  95. sleep(1); // 秒
  96. #endif
  97. }
  98. // system("pause");
  99. return 0;
  100. }  


转自: 点击打开链接
  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值