麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 服務(wù)器 > Linux服務(wù)器 > 正文

linux下C語(yǔ)言實(shí)現(xiàn)寫(xiě)日志功能

2024-09-05 23:04:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

先上程序,該程序經(jīng)過(guò)測(cè)試能夠很好的實(shí)現(xiàn)寫(xiě)日志要求

/*************************************************************************  > 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);}

程序?qū)崿F(xiàn)的日志格式為:

時(shí)間 + 空格 + 具體實(shí)現(xiàn)(自己的調(diào)試內(nèi)容)

本段程序值得學(xué)習(xí)的地方:

  1. va_list 結(jié)構(gòu)體的使用
  2. linux 的格式化輸出字符串
  3. 文件操作過(guò)程中pthread_mutex鎖的使用,以及他的優(yōu)點(diǎn)
  4. linux DEBUG 的應(yīng)用,方便調(diào)試

linux如何查看日志:

使用tail 命令可以實(shí)現(xiàn)日志的查詢(xún),以及其他功能,不了解的話,自行查資料解決。

對(duì)上面應(yīng)用不明白的請(qǐng)自行查資料解決。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到服務(wù)器教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产羞羞视频 | 深夜精品福利 | 免费观看三级毛片 | 精品国产一区二 | 日韩在线欧美在线 | 牛牛碰在线| 亚州精品在线视频 | 5xsq在线视频 | 欧美77 | 黄色网址你懂的 | 999久久久精品| 日韩精品中文字幕一区二区 | 日韩在线播放第一页 | 日韩精品一二三区 | 国产成人在线观看免费 | 国产亚洲精品久久久久久网站 | 亚洲婷婷日日综合婷婷噜噜噜 | 亚洲第九十九页 | 北原夏美av | 成人毛片视频在线观看 | 免费观看视频网站 | 91一区二区三区久久久久国产乱 | 精品av在线播放 | 精品国产乱码一区二区三区四区 | 成人午夜影院 | 91情侣偷在线精品国产 | 久久久国产精品网站 | 久久精品欧美一区二区 | www久久国产 | av观看国产| 青青国产在线视频 | 爱视频福利| 男女牲高爱潮免费视频男女 | 成人免费福利网站 | 香蕉国产在线视频 | 一级黄色影片在线观看 | 蜜桃一本色道久久综合亚洲精品冫 | 今井夏帆av一区二区 | 免费在线观看中文字幕 | 毛片视频在线免费观看 | 国产精品视频亚洲 |