1. 程式人生 > >用c語言實現日誌功能

用c語言實現日誌功能

windows.h 用c語言實現 pause truct argc ifdef open info oid

// 參考鏈接 
// C語言實現寫入日誌文件 https://blog.csdn.net/sunlion81/article/details/8647028
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#ifdef WIN32
#include <windows.h>
#else
#include <unistd.h>        // linux下頭文件
#endif

#define FILE_MAX_SIZE (1024*1024)

/*
獲得當前時間字符串 @param buffer [out]: 時間字符串 @return 空 */ void get_local_time(char* buffer) { time_t rawtime; struct tm* timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); sprintf(buffer, "%04d-%02d-%02d %02d:%02d:%02d", (timeinfo->tm_year+1900), timeinfo->tm_mon, timeinfo->tm_mday, timeinfo
->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); } /* 獲得日誌文件大小 @param filename [in]: 文件名 @return 文件大小 */ long get_file_size(char* filename) { long length = 0; FILE *fp = NULL; fp = fopen(filename, "rb"); if (fp != NULL) { fseek(fp, 0, SEEK_END); length
= ftell(fp); } if (fp != NULL) { fclose(fp); fp = NULL; } return length; } /* 寫入日誌文件 @param filename [in]: 日誌文件名 @param max_size [in]: 日誌文件大小限制 @param buffer [in]: 日誌內容 @param buf_size [in]: 日誌內容大小 @return 空 */ void write_log_file(char* filename, long max_size, char* buffer, unsigned buf_size) { if (filename != NULL && buffer != NULL) { // 文件超過最大限制, 刪除 long length = get_file_size(filename); if (length > max_size) { unlink(filename); // 刪除文件 } // 寫日誌 { FILE *fp; fp = fopen(filename, "at+"); if (fp != NULL) { char now[32]; memset(now, 0, sizeof(now)); get_local_time(now); fwrite(now, strlen(now)+1, 1, fp); fwrite(buffer, buf_size, 1, fp); fclose(fp); fp = NULL; } } } } int main(int argc, char** argv) { int i; for (i=0; i<10; ++i) { char buffer[32]; memset(buffer, 0, sizeof(buffer)); sprintf(buffer, "====> %d\n", i); write_log_file("log.txt", FILE_MAX_SIZE, buffer, strlen(buffer)); #ifdef WIN32 Sleep(100); // 毫秒 #else sleep(1); // #endif } // system("pause"); return 0; }

用c語言實現日誌功能