文档详情

Linux高级环境编程实验报告2.doc

发布:2025-05-10约9.55千字共9页下载文档
文本预览下载声明

作业报告

学生姓名:学号:指导教师:

学生E-mail:

一、作业名称:带缓存的文件操作类

二、作业要求

在创立执行体程序库中的日志类的过程中,分析得出通过缓存向文件中写入数据时,能够提高读写磁盘的性能。本文根据这个思想,建立一个简单的文件操作的封装类,其内部对根本的文件操作函数〔open、lseek、read、write、close〕进行封装,对外提供读写操作接口,并提供数据的缓存效劳:1、调用该类的写操作接口时,数据要首先写到缓存中,再根据要求写入文件中;2、调用该类的度操作接口时,该类能够缓存读出的数据;3、读写缓存要保持一致性。

三、设计与实现

首先看下该封装类的定义:

classEXFileOperator{

public:

EXFileOperator(constchar*_FileName);

~EXFileOperator();

voidF_READ(int_position,int_length);

voidF_WRITE(constchar*pstrMsg);

private:

EXFileOperator();

intReadFile(intposition,intlength);

intWriteFile(constchar*pstrMsg);

intFlush();

constchar*FileName;

int_fd;

pthread_mutex_t*m_pMutex;

char*m_pBuffer;

unsignedintm_nUsedBytesForBuffer;

};

EXFileOperator类中F_READ和F_WRITE是该类对外提供的读写操作的接口,其中F_READ表示从给定位置(_Position)开始读出_length长度的文件内容;调用F_WRITE函数,将pstrMsg指向的信息串写入到文件中。

内部ReadFile和WriteFile分别封装了文件read和write操作函数,lseek也封装在ReadFile中。在读操作之前和缓存缺乏时可调用Flush函数进行缓存的刷新。另外,类中还提供了保存一些信息的成员变量,包括需要操作的文件的文件名(FileName)、文件标识符(_fd),以及互斥量m_pMutex和缓存区(m_Buffer)。

文件的翻开和关闭操作分别封装在该类的构造函数和析构函数中,设置缓存已用长度为0。假设互斥量初始化操作失败,那么需要进行一些去除工作。关闭文件后,还要撤销互斥量和回收缓存。

EXFileOperator::EXFileOperator(constchar*_FileName){

_fd=open(_FileName,O_RDWR|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR);

if(_fd==-1)throwInEXFileOperator::EXFileOperator(),openerror;

m_pBuffer=newchar[BUFFER_SIZE];

m_nUsedBytesForBuffer=0;

m_pMutex=newpthread_mutex_t;

if(pthread_mutex_init(m_pMutex,0)!=0){

deletem_pMutex;

delete[]m_pBuffer;

close(_fd);

throwInEXFileOperator::EXFileOperator(),initerror;

}

}

EXFileOperator::~EXFileOperator(){

if(_fd!=0)close(_fd);

if(m_pMutex!=0)deletem_pMutex;

if(m_pBuffer!=0)delete[]m_pBuf

显示全部
相似文档