#include "log.h" #include #include #include #include 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; }