电 子 科 技 大 学
作 业 报 告
一、作业名称
平时作业1:
编写一个带缓存的文件操作类
从执行体程序库中的CLLogger类可知,通过缓存要写入文件中的数据,能够提高读写磁盘的性能 其要求如下: 需要提供open/read/write/lseek/close等函数的封装函数,该类要提供数据缓存服务。调用该类的写操作接口时,数据要首先写到缓存,然后再根据策略写到文件中。调用该类的读操作接口时,该类能根据策略缓存读出的数据
二、作业要求
需要写明自己对该作业需求的理解,明确作业目标
作业1的核心功能需求为:1数据的缓存功能,写操作时,数据首先写入内存缓存,然后根据策略写入磁盘文件。读操作也需要根据策略缓存从文件中读取的数据。2文件操作函数的封装,需要自己编写提供open、read、write、lseek、close等函数,模拟文件操作的基本接口。3读写策略的选取。在缓存写入过程中,数据首先被写入到内存中的缓存,当缓存中的数据达到1KB阈值,数据一次性被写入到磁盘文件中,并清空缓存,便于缓存新的数据。在缓存读取方法中,首先尝试从缓存中读取数据。如果缓存中的数据不足以满足读取请求,那么剩余所需的数据将直接从磁盘文件中读取,并添加到缓存当中。
三、设计与实现
首先,定义一个结构体来表示文件操作类,包含文件描述符、缓存区、缓存大小等成员变量。
typedef struct {
int fd; // 文件描述符
char* buffer; // 缓存区
size_t bufferSize; // 缓存区已使用的大小
off_t filePos; // 文件当前位置
off_t bufferPos; // 缓存区当前位置
} CLLogger;
接着,定义了基础的初始化、关闭、读取、写入、文件指针移动函数
int cllogger_init(CLLogger *logger, const char *filename, const char *mode);
int cllogger_close(CLLogger *logger);
int cllogger_open(CLLogger *logger, const char *filename, const char *mode);
int cllogger_close(CLLogger *logger);
ssize_t cllogger_read(CLLogger *logger, void *buf, size_t count);
ssize_t cllogger_write(CLLogger *logger, const void *buf, size_t count);
off_t cllogger_lseek(CLLogger *logger, off_t offset, int whence);
另外,还需要设计缓存策略:
写操作:将数据写入缓存,如果缓存满,则将缓存内容写入文件,并清空缓存。
读操作:从缓存读取数据,如果缓存不足,则从文件中读取数据填充缓存。
四、测试
需要说明测试方案、测试代码的设计实现方案,以及测试结果,如截图等
测试用例(实现简单的文件打开和数据写入):
int main() {