为提高性能,改用c替换原本的flask
This commit is contained in:
73
c/tools/log/log.c
Normal file
73
c/tools/log/log.c
Normal file
@ -0,0 +1,73 @@
|
||||
#include "log.h"
|
||||
#include <stdio.h>
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int in_log(logs *log,log_manager *self)
|
||||
{
|
||||
sem_wait(&self->log_sem);//加锁
|
||||
logs *buf = self->rear;
|
||||
if(self->log == NULL){
|
||||
self->log = log;
|
||||
self->rear = log;
|
||||
return 0;
|
||||
}
|
||||
self->count++;
|
||||
buf->next = log;
|
||||
log->next = NULL;
|
||||
self->rear = log;
|
||||
sem_post(&self->log_sem);
|
||||
return self->count;
|
||||
}
|
||||
|
||||
logs *out_log(log_manager *self)
|
||||
{
|
||||
sem_wait(&self->log_sem);
|
||||
logs *buf = self->log;
|
||||
if(self->log->next ==NULL)
|
||||
self->log = self->rear = NULL;
|
||||
self->count--;
|
||||
sem_post(&self->log_sem);
|
||||
buf->next =NULL;
|
||||
return buf;
|
||||
}
|
||||
|
||||
//定期清理函数
|
||||
void *clear_log(void *self_p)
|
||||
{
|
||||
log_manager *self = (log_manager*)self_p;
|
||||
for(;;)
|
||||
{
|
||||
sleep(1000);
|
||||
sem_wait(&self->log_sem);
|
||||
if(self->count<256){
|
||||
sem_post(&self->log_sem);
|
||||
continue;
|
||||
}
|
||||
logs* buf = self->log;
|
||||
self->log = self->rear =NULL;
|
||||
sem_post(&self->log_sem);
|
||||
logs* tobeclear;
|
||||
while(buf->next !=NULL)
|
||||
{
|
||||
tobeclear = buf;
|
||||
buf = buf->next;
|
||||
free(tobeclear);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int init_loger(log_manager *self)
|
||||
{
|
||||
if(self == NULL)
|
||||
{
|
||||
perror("NULL\n");
|
||||
return -1;
|
||||
}
|
||||
sem_init(&self->log_sem, 0,1);
|
||||
self->in_log = in_log;
|
||||
self->out_log = out_log;
|
||||
self->clear_log = clear_log;
|
||||
self->log = NULL;
|
||||
}
|
27
c/tools/log/log.h
Normal file
27
c/tools/log/log.h
Normal file
@ -0,0 +1,27 @@
|
||||
#ifndef LOG
|
||||
#define LOG
|
||||
|
||||
#include <semaphore.h>
|
||||
|
||||
#define MAX_LOG 256
|
||||
|
||||
typedef struct logs
|
||||
{
|
||||
char log[1024];
|
||||
struct logs *next;
|
||||
}logs;
|
||||
|
||||
typedef struct log_manager
|
||||
{
|
||||
int (*in_log)(logs *,struct log_manager*);
|
||||
logs* (*out_log)(struct log_manager*);
|
||||
void *(*clear_log)(void*);
|
||||
sem_t log_sem;
|
||||
logs *log;
|
||||
logs *rear;
|
||||
int count;
|
||||
}log_manager;
|
||||
|
||||
int init_loger(log_manager *self);
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user