国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Linux服務器 > 正文

linux下C語言實現寫日志功能

2024-09-05 23:04:51
字體:
來源:轉載
供稿:網友

先上程序,該程序經過測試能夠很好的實現寫日志要求

/*************************************************************************  > File Name: log.c  > Author:  ************************************************************************/#include <stdio.h>#include <sys/types.h> #include <unistd.h> #include <stdlib.h>#include <string.h>#include <errno.h>#include <stdarg.h>#include <time.h>#include <pthread.h>int safe_asprintf(char **strp, const char *fmt, ...);int safe_vasprintf(char **strp, const char *fmt, va_list ap);void plog(const char *format, ...) ;void pinfo(const char *format, ...) ;#define DEBUG#ifdef DEBUGvoid plog(const char *format, ...);void pinfo(const char *format, ...);#define debug(fmt, args...) plog(fmt, ##args) #else#define debug(fmt, args...) do{}while(0)#endifstatic pthread_mutex_t fileMutex = PTHREAD_MUTEX_INITIALIZER;int main(int argc, char *argv){  return 0;}/* * safe_asprintf(); */int safe_asprintf(char **strp, const char *fmt, ...) {  va_list ap;  int retval;  va_start(ap, fmt);  retval = safe_vasprintf(strp, fmt, ap);  va_end(ap);  return retval;}/* * safe_vasprintf(); */int safe_vasprintf(char **strp, const char *fmt, va_list ap) {  int retval;  retval = vasprintf(strp, fmt, ap);  if (retval == -1)   {    printf("Failed to vasprintf: %s. Bailing out/n", strerror(errno));    return 1;  }  return retval;}/* * plog(); */void plog(const char *format, ...) {  pthread_mutex_lock(&fileMutex);  FILE *fp = NULL;  va_list vlist;  char *fmt = NULL;  // Open debug info output file.  if (!(fp = fopen("log.txt", "a+"))) {    pthread_mutex_unlock(&fileMutex);    return;  }  va_start(vlist, format);  safe_vasprintf(&fmt, format, vlist);  va_end(vlist);  if (!fmt) {    pthread_mutex_unlock(&fileMutex);    return;  }  time_t timep;  struct tm *ptm = NULL;  time(&timep);  ptm = localtime(&timep);  fprintf(fp, "[%04d-%02d-%02d-%02d-%02d-%02d] %s",       ptm->tm_year + 1900,       ptm->tm_mon + 1,      ptm->tm_mday,       ptm->tm_hour,       ptm->tm_min,       ptm->tm_sec,       fmt);  free(fmt);  fsync(fileno(fp));  fclose(fp);  pthread_mutex_unlock(&fileMutex);}/* * pinfo(); */void pinfo(const char *format, ...) {  pthread_mutex_lock(&fileMutex);  FILE *fp = NULL;  va_list vlist;  char *fmt = NULL;  // Open debug info output file.  if (!(fp = fopen("log.txt", "a+"))) {    pthread_mutex_unlock(&fileMutex);    return;  }  va_start(vlist, format);  safe_vasprintf(&fmt, format, vlist);  va_end(vlist);  if (!fmt) {    pthread_mutex_unlock(&fileMutex);    return;  }  fprintf(fp, "%s", fmt);  free(fmt);  fsync(fileno(fp));  fclose(fp);  pthread_mutex_unlock(&fileMutex);}

程序實現的日志格式為:

時間 + 空格 + 具體實現(自己的調試內容)

本段程序值得學習的地方:

  1. va_list 結構體的使用
  2. linux 的格式化輸出字符串
  3. 文件操作過程中pthread_mutex鎖的使用,以及他的優點
  4. linux DEBUG 的應用,方便調試

linux如何查看日志:

使用tail 命令可以實現日志的查詢,以及其他功能,不了解的話,自行查資料解決。

對上面應用不明白的請自行查資料解決。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 游戏| 古田县| 绿春县| 云阳县| 密山市| 明水县| 册亨县| 洞头县| 汨罗市| 墨竹工卡县| 东辽县| 石台县| 灵丘县| 赤城县| 锡林浩特市| 泰宁县| 邓州市| 阜阳市| 内丘县| 黄梅县| 河东区| 奉节县| 大悟县| 若羌县| 汝南县| 双牌县| 彭州市| 确山县| 潮州市| 永平县| 通渭县| 瑞丽市| 原阳县| 桐乡市| 乐昌市| 稷山县| 朝阳市| 郸城县| 乌审旗| 新泰市| 县级市|