acl  3.5.3.0
ostream.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "../stdlib/pipe_stream.hpp"
4 #include "stream.hpp"
5 
6 struct iovec;
7 
8 namespace acl {
9 
10 class string;
11 
12 /**
13  * 输入流处理过程类,调用者想确切知道输出流是否出错或是否关闭,
14  * 应该调用 stream->eof() 来进行判断
15  */
16 
18  : virtual public stream
19  , public pipe_stream
20 {
21 public:
22  ostream(void) {}
23  virtual ~ostream(void) {}
24 
25  /**
26  * 写数据至输出流中
27  * @param data {const void*} 数据指针地址
28  * @param size {size_t} data 数据长度(字节)
29  * @param loop {bool} 是否保证数据全部输出才返回,如果为 true,
30  * 则该函数直至数据全部输出或出错才会返回;否则仅写一次便返回,
31  * 但并不保证数据全部写完
32  * @param buffed {bool} 是否先缓存待写的数据
33  * @return {int} 真实写入的数据量, 返回 -1 表示出错
34  */
35  int write(const void* data, size_t size, bool loop = true,
36  bool buffed = false);
37 
38  /**
39  * 如果采用写缓冲方式,则最后需要调用本函数刷写缓冲区
40  * @return {bool} 返回 false 表示写失败,有可能是连接关闭
41  */
42  bool fflush(void);
43 
44  /**
45  * 写数据至输出流中
46  * @param v {const struct iovec*}
47  * @param count {int} 数组 v 的元素个数
48  * @param loop {bool} 是否保证数据全部输出才返回,如果为 true,
49  * 则该函数直至数据全部输出或出错才会返回;否则仅写一次便返回,
50  * 但并不保证数据全部写完
51  * @return {int} 真实写入的数据量, 返回 -1 表示出错
52  */
53  int writev(const struct iovec *v, int count, bool loop = true);
54 
55  /**
56  * 带格式方式写数据,类似于 vfprintf,保证数据全部写入
57  * @param fmt {const char*} 格式字符串
58  * @param ap {va_list} 变参列表
59  * @return {int} 真实写入的数据长度,返回 -1 表示出错
60  */
61  int vformat(const char* fmt, va_list ap);
62 
63  /**
64  * 带格式方式写数据,类似于 fprintf,保证数据全部写入
65  * @param fmt {const char*} 变参格式字符串
66  * @return {int} 真实写入的数据长度,返回 -1 表示出错
67  */
68  int format(const char* fmt, ...) ACL_CPP_PRINTF(2, 3);
69 
70  /**
71  * 写入一个 64 位整数
72  * @param n {acl_int64} 64 位数据
73  * @return {int} 写入的数据长度,返回 -1 表示出错
74  */
75 #if defined(_WIN32) || defined(_WIN64)
76  int write(__int64 n);
77 #else
78  int write(long long int n);
79 #endif
80 
81  /**
82  * 写入一个 32 位整数
83  * @param n {int} 32 位整数
84  * @return {int} 写入的数据长度,返回 -1 表示出错
85  */
86  int write(int n);
87 
88  /**
89  * 写入一个 16 位短整数
90  * @param n {int} 16 位整数
91  * @return {int} 写入的数据长度,返回 -1 表示出错
92  */
93  int write(short n);
94 
95  /**
96  * 写一个字节
97  * @param ch {char}
98  * @return {int} 写入的数据长度,返回 -1 表示出错
99  */
100  int write(char ch);
101 
102  /**
103  * 输出缓冲区中的数据
104  * @param s {const string&}
105  * @param loop {bool} 是否要求全部输出完才返回
106  * @return {int} 输出数据的长度,返回 -1 表示出错
107  */
108  int write(const string& s, bool loop = true);
109 
110  /**
111  * 输出一行字符串数据,在所给字符串后添加 "\r\n"
112  * @param s {const char*} 字符串指针,必须以 '\0' 结尾
113  * @return {int} 输出数据的长度,返回 -1 表示出错
114  */
115  int puts(const char* s);
116 
117  /**
118  * 以下几个函数为输出操作符重载函数,且都是阻塞输出过程,
119  * 如果想判断输出流是否出错或关闭应该调用 stream->eof()
120  * 来进行判断
121  */
122 
123  ostream& operator<<(const string& s);
124  ostream& operator<<(const char* s);
125 #if defined(_WIN32) || defined(_WIN64)
126  ostream& operator<<(__int64 n);
127 #else
128  ostream& operator<<(long long int n);
129 #endif
130  ostream& operator<<(int n);
131  ostream& operator<<(short n);
132  ostream& operator<<(char ch);
133 
134  // pipe_stream 几个虚函数
135  // 因为是输出流,所以仅实现一个
136  virtual int push_pop(const char* in, size_t len,
137  string* out = NULL, size_t max = 0);
138  virtual int pop_end(string* out, size_t max = 0)
139  {
140  (void) out;
141  (void) max;
142  return (0);
143  }
144 
145 protected:
146 private:
147 };
148 
149 } // namespace acl
virtual ~ostream(void)
Definition: ostream.hpp:23
#define ACL_CPP_PRINTF(format_idx, arg_idx)
Definition: atomic.hpp:75
ACL_API ACL_VSTRING const char * format
Definition: acl_vstring.h:239
virtual int pop_end(string *out, size_t max=0)
Definition: ostream.hpp:138
ACL_API void const char * fmt
Definition: acl_aio.h:771
#define ACL_CPP_API
ostream(void)
Definition: ostream.hpp:22