用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(<ime );
tmNow = gmtime( <ime );
strcpy(s,asctime(gmtime(<ime)));
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(<ime );
tmNow = gmtime( <ime );
strcpy(s,asctime(gmtime(<ime)));
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);
}
}