bsl_filestream.h 3.4 KB
Newer Older
W
wangguibao 已提交
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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
/***************************************************************************
 * 
 * Copyright (c) 2008 Baidu.com, Inc. All Rights Reserved
 * $Id: bsl_filestream.h,v 1.4 2008/12/15 09:56:59 xiaowei Exp $ 
 * 
 **************************************************************************/
 
 
 
/**
 * @file bsl_filestream.h
 * @author xiaowei(com@baidu.com)
 * @date 2008/07/25 17:05:19
 * @version $Revision: 1.4 $ 
 * @brief 
 *  
 **/


#ifndef  __BSL_FILESTREAM_H_
#define  __BSL_FILESTREAM_H_

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <bsl/archive/bsl_stream.h>

namespace bsl
{
class filestream : public stream
{
	FILE *_fp;
	int _trans;
	int _trans_off;
	char *_wbuffer;
	size_t _wbuffersize;
	char *_rbuffer;
	size_t _rbuffersize;
public:
	filestream();
	~filestream();
	/**
	 * @brief 文件打开模式
	 *
	 * @param [in/out] fname   : const char* 文件名
	 * @param [in/out] mode   : const char* 文件打开模式, 
	 * 								"w" 写打开
	 * 								"r" 读打开
	 * 								不要尝试读写打开,参数跟FILE一样
	 * @return  int  0表示成功,其他失败
	 * @retval   
	 * @see 
	 * @note 
	 * @author xiaowei
	 * @date 2008/11/04 10:24:02
	**/
	int open(const char *fname, const char *mode);
	/**
	 * @brief 关闭文件
	 *
	 * @return  int 
	 * @retval   
	 * @see 
	 * @note 
	 * @author xiaowei
	 * @date 2008/11/04 10:26:05
	**/
	int close();
	/**
	 * @brief 往文件里面写数据,如果写入失败,什么都不发生
	 * 要吗写入,要吗回滚到上一个状态
	 *
	 * @param [in/out] dat   : const void* 要写的数据指针
	 * @param [in/out] size   : size_t 写的数据长度
	 * @return  int 0 表示成功
	 * @retval   
	 * @see 
	 * @note 
	 * @author xiaowei
	 * @date 2008/11/04 10:26:17
	**/
	int write(const void *dat, size_t size);
	/**
	 * @brief 往文件里面读数据,如果读入失败,什么都不发生
	 * 要吗读入,要吗回滚到上一个状态 
	 *
	 * @param [in/out] dat   : void*   
	 * @param [in/out] size   : size_t
	 * @return  int 0表示成功
	 * @retval   
	 * @see 
	 * @note 
	 * @author xiaowei
	 * @date 2008/11/04 10:28:41
	**/
	int read(void *dat, size_t size);
	/**
	 * @brief 开启一个事务
	 *
	 * @return  int 0 开启成功
	 * @retval   
	 * @see 
	 * @note 
	 * @author xiaowei
	 * @date 2008/11/04 10:29:49
	**/
	int start_trans();
	/**
	 * @brief 结束一个事务
	 *
	 * @return  int 0表示成功
	 * @retval   
	 * @see 
	 * @note 
	 * @author xiaowei
	 * @date 2008/11/04 10:30:08
	**/
	int comit_trans();
	/**
	 * @brief 放弃一个事务
	 *
	 * @param [in] trunc   : bool
	 * 					false : 不将该事务对磁盘的操作丢弃
	 * 					true : 将该事务对磁盘的操作丢弃
	 * @return  int 0表示成功
	 * @retval   
	 * @see 
	 * @note 
	 * @author xiaowei
	 * @date 2008/11/04 10:30:31
	**/
	int drop_trans(bool trunc);
	/**
	 * @brief 设置写缓冲区
	 *
	 * @param [in/out] size   : size_t 缓冲区大小为byte
	 * @return  int 成功返回0
	 * @retval   
	 * @see 
	 * @note 
	 * @author xiaowei
	 * @date 2008/11/04 10:32:12
	**/
	int setwbuffer(size_t size);
	/**
	 * @brief 设置读缓冲区
	 *
	 * @param [in/out] size   : size_t 缓冲区大小位byte
	 * @return  int 成功返回0
	 * @retval   
	 * @see 
	 * @note 
	 * @author xiaowei
	 * @date 2008/11/04 10:33:01
	**/
	int setrbuffer(size_t size);
	/**
	 * @brief 强制将数据刷到硬盘
	 *
	 * @return  int 
	 * @retval   
	 * @see 
	 * @note 
	 * @author xiaowei
	 * @date 2008/11/04 10:34:30
	**/
	int flush();
};
};


#endif  //__BSL_FILESTREAM_H_

/* vim: set ts=4 sw=4 sts=4 tw=100 */