-
Notifications
You must be signed in to change notification settings - Fork 1
/
fileutility.h
120 lines (117 loc) · 3.41 KB
/
fileutility.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#pragma once
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <mutex>
#include <vector>
#include <condition_variable>
#include <atomic>
#include <list>
#include <thread>
namespace Logger_nsp
{
namespace FileUtility
{
class FileUtil
{
private:
typedef unsigned char uchar;
std::atomic<bool> done;
std::condition_variable data_cond;
//std::vector<std::thread>threadPool;
std::thread threadPool;
std::mutex lockMutex;
private:
size_t writtenBytes;
size_t submitSize;
size_t unUsedBytes;
char buffer[128 * 1024];
char submitBuffer[128 * 1024];
char* submitBufferPtr;
std::list<FILE*>fileHandler;
FILE* fp;
size_t Write(const char* src, size_t len);
public:
FileUtil(std::string);
FileUtil();
~FileUtil();
//************************************
// @Method: Append
// @Returns: void
// @Parameter: src
// @Parameter: len
// @Brief: 文件的写入操作,字节流式写入
//************************************
void Append(const char* src, size_t len);
//************************************
// @Method: GetMutex
// @Returns: std::mutex&
// @Brief: 取得互斥量
//************************************
std::mutex& GetMutex()const;
//************************************
// @Method: SetSubmitSize
// @Returns: void
// @Parameter: len
// @Brief: 设置提交的数据量大小
//************************************
void SetSubmitSize(size_t len);
//************************************
// @Method: AvailSubmitBuffer
// @Returns: int
// @Brief: 提交缓冲可用大小
//************************************
int AvailSubmitBuffer()const;
//************************************
// @Method: GetSubmitBuffer
// @Returns: uchar*
// @Brief: 已提交缓冲区所指地址
//************************************
char* GetSubmitBuffer()const;
//************************************
// @Method: WrittenBytes
// @Returns: size_t
// @Brief: 已写入数据字节
//************************************
size_t WrittenBytes()const;
void Flush();
//************************************
// @Method: Start
// @Returns: void
// @Brief: 开启后台刷新线程
//************************************
void Start();
//************************************
// @Method: Update
// @Returns: void
// @Brief: 后台刷新数据到文件 由于调度问题可能每个文件大小不完全相同
//************************************
void Update();
//************************************
// @Method: NotifyMe
// @Returns: void
// @Brief: 条件变量封装,用于通知线程已有数据
//************************************
void NotifyMe();
//************************************
// @Method: CreateNewLogFile
// @Returns: void
// @Parameter: fileName
// @Brief: 文件滚动
//************************************
void CreateNewLogFile(std::string fileName);
//************************************
// @Method: GetOriginBuffer
// @Returns: char*
// @Brief: 取得原始缓冲区地址
//************************************
char* GetOriginBuffer()const;
//************************************
// @Method: SwitthFileHandler
// @Returns: void
// @Brief: 切换文件句柄
//************************************
void SwitthFileHandler();
};
}
}