acl  3.5.3.0
aio_fstream.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "aio_istream.hpp"
4 #include "aio_ostream.hpp"
5 
6 namespace acl {
7 
8 class fstream;
9 
10 /**
11  * 异步文件读写流,该类对象只可用在 UNIX 系统中
12  */
14  : public aio_istream
15  , public aio_ostream
16 {
17 public:
18  /**
19  * 构造函数
20  * @param handle {aio_handle*} 异步事件句柄
21  */
22  aio_fstream(aio_handle* handle);
23 
24 #if defined(_WIN32) || defined(_WIN64)
25  aio_fstream(aio_handle* handle, HANDLE fd, unsigned int oflags = 0600);
26 #else
27  aio_fstream(aio_handle* handle, int fd, unsigned int oflags = 0600);
28 #endif
29 
30  /**
31  * 根据文件路径打开文件流, 这是最基础的打开文件的方式
32  * @param path {const char*} 文件名
33  * @param oflags {unsigned int} 标志位, We're assuming that O_RDONLY: 0x0000,
34  * O_WRONLY: 0x0001, O_RDWR: 0x0002, O_APPEND: 0x0008, O_CREAT: 0x0100,
35  * O_TRUNC: 0x0200, O_EXCL: 0x0400; just for win32, O_TEXT: 0x4000,
36  * O_BINARY: 0x8000, O_RAW: O_BINARY, O_SEQUENTIAL: 0x0020, O_RANDOM: 0x0010.
37  * @param mode {int} 打开文件句柄时的模式(如: 0600)
38  * @return {bool} 打开文件是否成功
39  */
40  bool open(const char* path, unsigned int oflags, unsigned int mode);
41 
42  /**
43  * 以读/写方式打开文件流,当文件不存在时则创建新文件,当文件存在时则
44  * 将文件清空, 文件属性为 0700
45  * @param path {const char*} 文件名
46  * @param mode {int} 打开文件句柄时的模式(如: 0600)
47  * @return {bool} 打开文件是否成功
48  */
49  bool open_trunc(const char* path, unsigned int mode = 0600);
50 
51  /**
52  * 以读/写方式建新文件,文件属性为 0600, 若文件不存在则创建新文件,若存在则
53  * 打开旧文件
54  * @param path {const char*} 文件全路径
55  * @param mode {int} 打开文件句柄时的模式(如: 0600)
56  * @return {bool} 文件创建是否成功
57  */
58  bool create(const char* path, unsigned int mode = 0600);
59 
60  /**
61  * 以只读方式打开已经存在的文件
62  * @param path {const char*} 文件名
63  * @return {bool} 打开文件是否成功
64  */
65  bool open_read(const char* path);
66 
67  /**
68  * 以只写方式打开文件,如果文件不存在则创建新文件,如果文件
69  * 存在,则将文件内容清空
70  * @param path {const char*} 文件名
71  * @return {bool} 是否成功
72  */
73  bool open_write(const char* path);
74 
75  /**
76  * 以尾部添加方式打开文件,如果文件不存在则创建新文件
77  * @param path {const char*} 文件名
78  * @return {bool} 是否成功
79  */
80  bool open_append(const char* path);
81 
82 protected:
83  ~aio_fstream(void);
84  /**
85  * 通过此函数来动态释放只能在堆上分配的异步流类对象
86  */
87  virtual void destroy(void);
88 
89 private:
90 };
91 
92 } // namespace acl
#define ACL_CPP_API