系统日志 c

用c 写了一个关于日志文件的函数,通过控制文件的大小,实现日志的读写。另外此程序是还实现了当日志数量到达10个后,会自动删除前9个,然后重新开始写日志。

写出来,大家分享,给个好的建议!

//写日志文件
void* Log(ThreadMess *threadmess)
{

 struct stat st;
 pthread_mutex_lock(&mutex5);
 if(stat(threadmess->path1,&st)<0)
 {
  perror("stat()");
  printf("%s/n",threadmess->path1);
        fopen(threadmess->path1,"a+");
     pthread_exit(NULL);
 }//stat函数通过文件名获取文件信息存储在st结构体中
 pthread_mutex_unlock(&mutex5);
 if(st.st_size>1024)//如果文件大小大于1024*1024 就把文件重命名
 {
  FILE *fp;    
  
  char s[30]={0};
  char q[]="communserver--->analyze:";
    time_t ltime;
        struct tm* tmNow;

        time(&ltime );
        tmNow = gmtime( &ltime );

       strcpy(s,asctime(gmtime(&ltime)));
  strcat(s,q);
  
  threadmess->count++;
  memset(threadmess->path1,0,255);
  sprintf(threadmess->path1,"/home/zyz1/ServerModle/CommToAnalyze%d.log",threadmess->count);
  creat(threadmess->path1,0766);
  if(threadmess->count==10)
  {
   int k = 0;
   for(k=0; k<=10; k++)
   {
    sprintf(threadmess->path1,"/home/zyz1/ServerModle/CommToAnalyze%d.log",k);
    if(k==10) break;
    remove(threadmess->path1);
   }
   threadmess->count = 0;
  }
  fp=fopen(threadmess->path1,"a+");
  if(fp==NULL) pthread_exit(NULL);
  pthread_mutex_lock(&mutex5);
  if(s==NULL) pthread_exit(NULL);
  //fputs(s,fp);
  fprintf(fp,"%s ",s);
  int i;
  for(i=0;i<threadmess->M_longth;i++)
  {
   fprintf(fp,"%x ",threadmess->stream[i]);
  }
  fputs("/r/n",fp);
  pthread_mutex_unlock(&mutex5);
  fclose(fp);
  
 }
 else
 { 
  FILE *fp;
  fp=fopen(threadmess->path1,"a+");
  if(fp==NULL) pthread_exit(NULL);
  char s[30]={0};
  char p[]="communserver--->analyze:";
    time_t ltime;
        struct tm* tmNow;

        time(&ltime );
        tmNow = gmtime( &ltime );

       strcpy(s,asctime(gmtime(&ltime)));
  strcat(s,p);
  pthread_mutex_lock(&mutex5);
  if(s==NULL) pthread_exit(NULL);
     fwrite(s,sizeof(s),1,fp);
  int i;
  for(i=0;i<threadmess->M_longth;i++)
  {
   fprintf(fp,"%x ",threadmess->stream[i]);
  }

  fputs("/r/n",fp);
  pthread_mutex_unlock(&mutex5);
  fclose(fp);

 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值