LIB-ZC, 一个跨平台(Linux)平台通用C/C++扩展库, stream 流操作
LIB-ZC, 一个跨平台(Linux)平台通用C/C++扩展库, stream 流操作
- lib-zc 封装了流操作
- 命名空间 zcc
- 基础类 stream(基类), iostream(io流封装)
class stream 介绍
连接相关
// 都是虚函数, 为 iostream 等做准备virtual inline bool connect(const char *destination) { return false; }inline bool connect(const std::string &destination);// openssl, 连接virtual int tls_connect(void *ctx) { return -1; }// openssl, 接受连接virtual int tls_accept(void *ctx) { return -1; }// closevirtual inline int close(bool close_fd_or_release_ssl = true) { return true; }// 是否已经打开/连接virtual inline bool is_opened() { return false; }// 是否已经关闭virtual inline bool is_closed() { return true; }
超时控制
// 超时inline int get_timeout() { return engine_->wait_timeout; }// 设置超时virtual stream &set_timeout(int wait_timeout);// 带超时是否可读virtual int timed_read_wait(int wait_timeout);
状态检查
// 是否错误inline bool is_error() { return (engine_->error ? true : false); }// 是否可读结束inline bool is_eof() { return (engine_->eof ? true : false); }// 设置错误inline stream &set_error(bool tf = true);// 设置可读结束inline stream &set_eof(bool tf = true);// 是否异常inline bool is_exception();
数据读取
// 带超时是否可读virtual int timed_read_wait(int wait_timeout);// 是否有真实可读数据virtual inline int trueDataReadabel();// 读 1 个字节inline int getc();// 退回一个字节stream &ungetc();// 读cache里数据的长度inline int get_read_cache_len();// 读cache里数据的地址inline char *get_read_cache();// 读最多max_len的字节int read(void *mem, int max_len);int read(std::string &str, int max_len);// 严格读取strict_len个字节inline int readn(int strict_len);int readn(void *mem, int strict_len);int readn(std::string &str, int strict_len);// 读取到分隔符delimiter为止, 最多 max_len 个字节int read_delimiter(void *mem, int delimiter, int max_len);int read_delimiter(std::string &str, int delimiter, int max_len);// 读行inline int gets(void *mem, int max_len);inline int gets(std::string &str, int max_len);
数据写入
// 带超时是否可写virtual int timed_write_wait(int wait_timeout);// 写cache里数据的长度inline int get_write_cache_len() { return (engine_->write_buf_len); }// 写cache里数据的地址inline char *get_write_cache(){engine_->write_buf[engine_->write_buf_len] = 0;return (char *)(engine_->write_buf);}// 写一个字节inline int putc(int c){return ((engine_->write_buf_len < wbuf_size) ? (engine_->write_buf[engine_->write_buf_len++] = (int)(c), (int)(c)) : (putc_do(c)));}// 退回一个字节stream &ungetc();// 刷写缓存int flush();// 写int write(const void *buf, int len);inline stream &puts(const char *s, int64_t len = -1);inline stream &puts(const std::string &str);inline stream &append(const char *s, int slen = -1);inline stream &append(const std::string &str);// 类似fprintf, 最多 1024 字节int printf_1024(const char *format, ...);
class iostream
实现了 io/socket 的流封装
连接
// open socketiostream &open_socket(int fd);// open ssliostream &open_ssl(SSL *ssl);// 直接连接地址, 如 "127.0.0.1:6379,localhost:6388", "/var/run/some-domain-socket"bool connect(const char *destination);inline bool connect(const std::string &destination){return connect(destination.c_str());}