亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? logger.c

?? 日志模塊
?? C
字號:
#include "Logger.h"static int bSwitch = 0;static int bStarted = 0;static LOG_LIST log_list;static pthread_t tid = 0;static CFG cfg;static void TrimChar (char *ptr, char c);static void *Worker (void *arg);static void *Gzip (void *arg);static void *Dispose (void *arg);static void Push (LOG * log);static LOG *Pop ();static void CleanUp (void *arg);static void WakeUp (int sig);static int ReadConfig (const char *szConfig);intStartLogger (const char *szProgName){  int err = 0;  pthread_t tid;  pthread_attr_t attr;	struct sigaction act;	  if (bStarted)    return 0;  if (szProgName == NULL)    return -1;  /*初始化 */  memset (&log_list, 0, sizeof (log_list));  pthread_mutex_init (&(log_list.mtx), NULL);  if (ReadConfig (szProgName) < 0)  {    printf ("ReadConfig error!\n");    return -1;  }  if (signal (SIGUSR1, WakeUp) == SIG_ERR)  {    perror ("Set SIGUSR1 error!");    return errno;  }  /*get ride of defunct*/  sigaction(SIGCHLD, NULL, &act);  /*act.sa_handler = SIG_IGN;   sigemptyset(&act.sa_mask);*/  act.sa_flags |= SA_NOCLDWAIT;  sigaction(SIGCHLD,&act,NULL);     pthread_attr_init (&attr);  pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);  pthread_create (&tid, &attr, Worker, NULL);  if (cfg.period > 0 && cfg.compress_log > 0)  {    pthread_create (&tid, &attr, Gzip, NULL);  }  if (cfg.period > 0 && cfg.delete_log_day > 0)  {    pthread_create (&tid, &attr, Dispose, NULL);  }  pthread_attr_destroy (&attr);  printf ("Start logger service...\n");  bStarted = 1;  return 0;}intReadConfig (const char *szConfig){  FILE *fp;  char str[128];  char szConfigName[128] = {0};  int i = 0, j;  memset (&cfg, 0, sizeof (cfg));	if (getenv("LOGGER") != NULL)	{		sprintf(szConfigName, "%s/Logger.cfg", getenv("LOGGER"));	}	else	{		sprintf(szConfigName, "%s/misc/Logger.cfg", getenv("HOME"));		}		if (GetPrivateProfileString(szConfig,"LOG_PATH","",cfg.log_path, \	sizeof(cfg.log_path),szConfigName) < 0)	{		return -1;	}	TrimChar (cfg.log_path, ' ');		if (GetPrivateProfileString(szConfig,"LOG_NAME1","",cfg.log_name[i], \	sizeof(cfg.log_path),szConfigName) < 0)	{		return -1;	}	TrimChar (cfg.log_name[i], ' ');	i++;		if (GetPrivateProfileString(szConfig,"LOG_NAME2","",cfg.log_name[i], \	sizeof(cfg.log_path),szConfigName) < 0)	{		return -1;	}	TrimChar (cfg.log_name[i], ' ');	i++;	memset (str, 0, sizeof (str));	if (GetPrivateProfileString(szConfig,"LOG_PERIOD","",str, \	sizeof(str),szConfigName) < 0)	{		return -1;	}	TrimChar (str, ' ');  cfg.period = atoi(str);	memset (str, 0, sizeof (str));	if (GetPrivateProfileString(szConfig,"LOG_COMPRESS","",str, \	sizeof(str),szConfigName) < 0)	{		return -1;	}	TrimChar (str, ' ');  cfg.compress_log = atoi(str);	memset (str, 0, sizeof (str));	if (GetPrivateProfileString(szConfig,"LOG_DELETE","",str, \	sizeof(str),szConfigName) < 0)	{		return -1;	}	TrimChar (str, ' ');  cfg.delete_log_day = atoi(str);  return 0;}static voidWakeUp (int sig){  if (signal (SIGUSR1, WakeUp) == SIG_ERR)  {    perror ("Set SIGUSR1 error!");    return;  }  if (bSwitch)    bSwitch = 0;  else    bSwitch = 1;}static voidPush (LOG * log){  pthread_mutex_lock (&(log_list.mtx));  if (log_list.head == NULL)    log_list.head = log_list.tail = log;  else  {    (log_list.tail)->next = log;    log_list.tail = log;  }  log_list.count++;  pthread_mutex_unlock (&(log_list.mtx));}static LOG *Pop (){  LOG *log;  pthread_mutex_lock (&(log_list.mtx));  if (log_list.head == NULL)  {    log = log_list.head;  }  else  {    log = log_list.head;    log_list.head = log_list.head->next;    log_list.count--;  }  pthread_mutex_unlock (&(log_list.mtx));  return log;}intWriteLog (const char *fmt, ...){  char szTmp[512] = { 0 };  LOG *log;  va_list argptr;  va_start (argptr, fmt);  vsnprintf (szTmp, sizeof (szTmp), fmt, argptr);  va_end (argptr);  printf ("%s", szTmp);  if (!bSwitch && bStarted)    return 0;  if (fmt == NULL)    return -1;  log = (LOG *) malloc (sizeof (LOG));  if (log == NULL)    return -1;  memset (log, 0, sizeof (LOG));  log->next = NULL;  log->content = (char *) malloc (strlen (szTmp) + 64);  if (log->content == NULL)  {    free (log);    return -1;  }  snprintf (log->content, strlen (szTmp) + 64, "pid(%d) thr(%d):%s",	    getpid (), pthread_self (), szTmp);  log->length = strlen (szTmp) + 64;  Push (log);  return 1;}intGetLogNums (){  int ret;  pthread_mutex_lock (&(log_list.mtx));  ret = log_list.count;  pthread_mutex_unlock (&(log_list.mtx));  return ret;}static voidCleanUp (void *arg){  LOG *log;  /*printf ("In CleanUp.\n");     printf ("items(%d)\n", GetLogNums ()); */  while ((log = Pop ()) != NULL)  {    if (log->content)      free (log->content);    if (log)      free (log);    printf ("freed a item\n");  }  /*printf ("released items(%d)\n", GetLogNums ()); */}voidTrimChar (char *ptr, char c){  int i, min, max, len;  if (*ptr == 0)    return;  for (i = 0; i < strlen (ptr); i++)  {    if (ptr[i] != c && ptr[i] != '\r' && ptr[i] != '\n')      break;  }  min = i;  for (i = strlen (ptr) - 1; i > -1; i--)  {    if (ptr[i] != c && ptr[i] != '\r' && ptr[i] != '\n')      break;  }  max = i + 1;  len = max - min;  for (i = 0; i < len; i++)    ptr[i] = ptr[i + min];  ptr[i] = 0;  return;}static void *Gzip (void *arg){  char szTemp[64];  char szFileName[128];  char szList[128];  char szCmd[512];  FILE *fp;  struct stat st;  time_t mt, now;  struct tm *tim;  printf ("In Gzip!\n");  for (;;)  {    sleep (cfg.period);    sprintf (szList, "ls %s|grep -v \".gz$\"", cfg.log_path);    fp = popen (szList, "r");    while (fgets (szTemp, sizeof (szTemp) - 1, fp) != NULL)    {      TrimChar (szTemp, ' ');      sprintf (szFileName, "%s/%s", cfg.log_path, szTemp);      printf ("Gzip %s\n", szFileName);      memset (&st, 0, sizeof (st));      if (stat (szFileName, &st) < 0)      {	printf ("%s doesn't exist!\n", szFileName);	continue;      }      if (S_ISDIR(st.st_mode))      {      	continue;      }      now = time (NULL);      mt = now - st.st_mtime;      tim = localtime (&mt);      if (tim->tm_mday - 1 > cfg.compress_log)      {	sprintf (szCmd, "/bin/gzip -c %s>>%s.gz", szFileName, szFileName);	printf ("%s\n", szCmd);	system (szCmd);	sprintf (szCmd, "/bin/rm -f %s", szFileName);	system (szCmd);      }    }    pclose (fp);  }}static void *Dispose (void *arg){  char szTemp[64];  char szFileName[128];  char szList[128];  char szCmd[512];  FILE *fp;  struct stat st;  time_t mt, now;  struct tm *tim;  printf ("In Dispose\n");  for (;;)  {    sleep (cfg.period);    sprintf (szList, "ls %s|grep \".gz$\"", cfg.log_path);    fp = popen (szList, "r");    while (fgets (szTemp, sizeof (szTemp) - 1, fp) != NULL)    {      TrimChar (szTemp, ' ');      sprintf (szFileName, "%s/%s", cfg.log_path, szTemp);      printf ("Dispose %s\n", szFileName);      memset (&st, 0, sizeof (st));      if (stat (szFileName, &st) < 0)      {	printf ("%s doesn't exist!\n", szFileName);	continue;      }      if (S_ISDIR(st.st_mode))      {      	continue;      }            now = time (NULL);      mt = now - st.st_mtime;      tim = localtime (&mt);      if (tim->tm_mday - 1 > cfg.delete_log_day)      {	sprintf (szCmd, "/bin/rm -f %s", szFileName);	printf ("%s\n", szCmd);	system (szCmd);      }    }    pclose (fp);  }}static void *Worker (void *arg){  char szFilename[128] = { 0 };  char szTemp[32];  char szScript[256];  FILE *fp;  FILE *pp;  time_t tt;  struct tm *tim;  LOG *log;  int i, j;  pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL);  pthread_cleanup_push (CleanUp, (void *) NULL);  printf ("In Worker procedure...\n");  for (;;)  {    if (!bSwitch)    {      CleanUp (NULL);      usleep (5 * 1000);      continue;    }    if ((log = Pop ()) == NULL)    {      usleep (3 * 1000);    }    else    {      memset (szFilename, 0, sizeof (szFilename));      for (i = 0; strlen (cfg.log_name[i]) > 0; i++)      {	if (strstr (cfg.log_name[i], "`"))	{	  memset (szTemp, 0, sizeof (szTemp));	  sscanf (cfg.log_name[i], "`%s`", szTemp);	  for (j = 0; szTemp[j]; j++)	  {	    if (szTemp[j] == '_')	      szTemp[j] = ' ';	  }	  TrimChar (szTemp, '`');	  printf ("szTemp(%s)\n", szTemp);	  pp = popen (szTemp, "r");	  if (pp == NULL)	    continue;	  memset (szScript, 0, sizeof (szScript));	  if (fgets (szScript, sizeof (szScript) - 1, pp) == NULL)	  {	  	pclose (pp);	    continue;		}	  pclose (pp);	  TrimChar (szScript, ' ');	  strcat (szFilename, szScript);	}	else	{	  strcat (szFilename, cfg.log_name[i]);	}	strcat (szFilename, " ");      }      TrimChar (szFilename, ' ');      memset (szScript, 0, sizeof (szScript));      sprintf (szScript, "%s/%s", cfg.log_path, szFilename);      for (i = 0; szScript[i]; i++)      {	if (szScript[i] == ' ')	  szScript[i] = '_';      }      printf ("file name is : %s\n", szScript);      fp = fopen (szScript, "a+");      if (fp == NULL)	continue;      tt = time (NULL);      tim = localtime (&tt);      fprintf (fp, "[%04d%02d%02d %02d:%02d:%02d]\n",	       tim->tm_year + 1900,	       tim->tm_mon + 1,	       tim->tm_mday, tim->tm_hour, tim->tm_min, tim->tm_sec);      fprintf (fp, "%s\n", log->content);      fclose (fp);      if (log->content != NULL)	free (log->content);      if (log != NULL)	free (log);    }  }  return NULL;}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
菠萝蜜视频在线观看一区| 亚洲一区二区三区中文字幕在线| 免费观看成人av| 91麻豆精品国产91久久久久| 亚洲国产精品尤物yw在线观看| 在线观看国产日韩| 亚洲一二三四在线观看| 欧美三级欧美一级| 免费视频最近日韩| 精品国产免费久久| 成人免费三级在线| 一区二区三区小说| 欧美一级艳片视频免费观看| 久久国产精品99久久人人澡| 久久久久久电影| 99久久精品国产一区| 亚洲最色的网站| 欧美高清激情brazzers| 激情久久五月天| 国产精品伦理一区二区| 在线观看av一区二区| 精品一区二区日韩| 1024国产精品| 欧美久久高跟鞋激| 高清不卡在线观看av| 亚洲免费观看高清完整版在线观看| 欧美日韩一区成人| 国产一区二区按摩在线观看| 亚洲啪啪综合av一区二区三区| 欧美日韩激情一区| 高清在线不卡av| 五月综合激情网| 国产亚洲一区字幕| 欧美日韩国产综合一区二区| 国产精品1区2区| 亚洲国产美女搞黄色| 中文字幕高清一区| 欧美一区2区视频在线观看| 国产+成+人+亚洲欧洲自线| 日韩电影在线观看一区| 国产精品久久久爽爽爽麻豆色哟哟 | 久久久午夜精品| 欧美在线影院一区二区| 国产大陆亚洲精品国产| 午夜精品福利视频网站| 国产精品三级久久久久三级| 制服丝袜国产精品| 91老司机福利 在线| 美女脱光内衣内裤视频久久网站 | 国产精品少妇自拍| 欧美精品三级在线观看| 成人精品视频一区二区三区 | 亚洲精品国产第一综合99久久 | 国产精品久久久久久亚洲毛片 | 久久免费看少妇高潮| 欧美日韩精品三区| 91小宝寻花一区二区三区| 国产麻豆精品视频| 蜜桃视频在线观看一区| 一二三区精品视频| 国产精品久久久久影院色老大| 日韩欧美另类在线| 欧美日韩在线综合| 一本色道久久综合亚洲91| 国内精品久久久久影院薰衣草| 日韩精品乱码免费| 午夜精品久久久久久久99水蜜桃| 国产精品久久久久久妇女6080| 久久综合色一综合色88| 69p69国产精品| 欧美在线观看一二区| av不卡一区二区三区| 成人午夜电影久久影院| 国产一区二区三区免费在线观看 | 国产乱码精品1区2区3区| 免播放器亚洲一区| 日韩电影免费一区| 天天av天天翘天天综合网| 亚洲自拍偷拍图区| 亚洲综合免费观看高清完整版| 亚洲欧洲色图综合| 中文字幕综合网| 亚洲精品五月天| 亚洲va欧美va国产va天堂影院| 精品奇米国产一区二区三区| 成人综合在线网站| 亚洲乱码日产精品bd| 国产精品福利一区二区三区| 国产欧美日韩三级| 久久精品在线观看| 欧美激情综合在线| 日韩毛片精品高清免费| 亚洲精品一二三四区| 亚洲综合图片区| 日本欧美大码aⅴ在线播放| 日韩va欧美va亚洲va久久| 麻豆精品新av中文字幕| 国产精品69久久久久水密桃| 成人黄色电影在线| 欧美午夜精品免费| 欧美一区二区三区的| 2023国产精华国产精品| 国产精品蜜臀在线观看| 一区二区三区av电影| 秋霞av亚洲一区二区三| 国产精品一级在线| 在线免费观看一区| 精品欧美久久久| 国产精品久久久久7777按摩| 亚洲愉拍自拍另类高清精品| 91小视频免费观看| 日韩亚洲电影在线| 欧美在线观看一二区| 日韩精品影音先锋| 国产精品久久久久久亚洲伦| 亚洲小说欧美激情另类| 激情综合色播五月| caoporn国产一区二区| 欧美高清视频www夜色资源网| 久久久三级国产网站| 亚洲最新视频在线播放| 国产精品一区二区久久精品爱涩| 色域天天综合网| 精品美女在线播放| 一区二区三区精品在线观看| 精品一区二区三区免费视频| 色婷婷av久久久久久久| 久久一夜天堂av一区二区三区| 亚洲欧美另类久久久精品| 久久国产精品无码网站| 色综合久久中文综合久久97| 欧美一级黄色录像| 亚洲精品免费在线观看| 国产乱人伦偷精品视频不卡| 欧美色视频在线观看| 欧美激情一区在线| 蜜乳av一区二区| 欧美羞羞免费网站| 亚洲精品一线二线三线| 久久99精品久久久久久国产越南| 99精品桃花视频在线观看| 91精品麻豆日日躁夜夜躁| 久久亚洲一区二区三区明星换脸| 一二三区精品福利视频| 国产91精品一区二区麻豆网站| 91精品国产色综合久久| 一区二区欧美视频| av激情成人网| 国产视频一区二区在线观看| 日本免费在线视频不卡一不卡二| 在线观看国产精品网站| 亚洲欧洲国产日韩| 国产成人av福利| 久久伊人中文字幕| 久久99日本精品| 91精品国产麻豆国产自产在线 | 亚洲香肠在线观看| 91丨九色丨黑人外教| 国产精品污污网站在线观看| 久久精品噜噜噜成人av农村| 91精品国产综合久久久久久久久久| 一区二区三区免费看视频| 91免费精品国自产拍在线不卡| 亚洲国产精品黑人久久久| 久久精品国产网站| 中文字幕佐山爱一区二区免费| 亚洲视频免费在线| 亚洲一区免费在线观看| 91美女福利视频| 最新热久久免费视频| www.久久久久久久久| ...av二区三区久久精品| gogogo免费视频观看亚洲一| 国产精品国产三级国产aⅴ入口| 成人一区在线看| 中文字幕 久热精品 视频在线| 高清av一区二区| 成人免费一区二区三区视频| 色播五月激情综合网| 一区二区久久久久| 3d动漫精品啪啪| 久久爱www久久做| 久久综合久久综合亚洲| 风间由美中文字幕在线看视频国产欧美| 精品久久一区二区| 国产成人在线视频免费播放| 国产喷白浆一区二区三区| 成人av资源在线观看| 亚洲精品乱码久久久久久日本蜜臀| 色婷婷综合视频在线观看| 亚洲国产日日夜夜| 日韩一区二区中文字幕| 国产福利一区二区三区在线视频| 国产精品福利av| 色婷婷久久久亚洲一区二区三区 | 国产精品福利av| 日本不卡中文字幕| 久久综合久色欧美综合狠狠| 成人免费视频视频在线观看免费 | 色噜噜狠狠一区二区三区果冻|