当前位置: 首页 > news >正文

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());}

相关文章:

  • Windows 11设置开机自动运行 .jar 文件
  • orcad csi 17.4 DRC规则设置及检查
  • 生成器模式深入解析与 Spring 源码应用
  • 新书速览|DeepSeek移动端AI应用开发:基于Android与iOS
  • AI数字人如何深度赋能政务场景?魔珐科技政务应用全景解读
  • 第十七届“华中杯”大学生数学建模挑战赛题目C题就业状态分析与预测完整 思路 代码 模型 结果 分享
  • Android守护进程——Vold (Volume Daemon)
  • C# 检查字符串是否包含在另一个字符串中
  • 集合框架--Set集合详解
  • rocketMQ 常见问题记录
  • 使用最新threejs复刻经典贪吃蛇游戏的3D版,附完整源码
  • [Java · 初窥门径] Java 语言初识
  • 拉取windows的docker镜像转到服务器上构建服务镜像
  • 裸金属服务器的应用场景有哪些?
  • 深度学习| Deep Snake环境配置+训练+预测评估(超全面)
  • 如何快速安装和使用AI数字人?AIStarter详细教程与操作指南
  • 【工具】gtest
  • Spring数据访问全解析:ORM整合与JDBC高效实践
  • 楼梯上下检测数据集VOC+YOLO格式5462张2类别
  • 【国家能源集团生态协作平台-注册/登录安全分析报告】
  • 电动自行车新国标将于9月1日落地,首批6家检测机构出炉
  • 人大书报资料中心与中科院文献中心共筑学科融合创新平台
  • 深一度|上海半马,展示“体育+”无限可能的路跑狂欢
  • 诺奖得主等数十位经济学家发表宣言反对美关税政策
  • 人民日报:当阅读成为“刚需”
  • 特朗普:乌克兰问题谈判短期内若无进展美将不再斡旋