当前位置: 首页 > 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());}

http://www.xdnf.cn/news/8101.html

相关文章:

  • conversation_template | conversation_actors | conversation_line_template
  • 网安加·百家讲坛 | 刘志诚:AI安全风险与未来展望
  • MCP的推出将给未来的开发带来哪些变革?
  • 解决jupyter notebook修改路径下没有c.NotebookApp.notebook_dir【建议收藏】
  • 第五章 SQLite数据库:4、SQLite 进阶用法:常见的约束、PRAGMA 配置、数据操作
  • 2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(二级)真题
  • 《软件设计师》复习笔记(4.2)——关系代数、函数依赖、范式
  • 下载HBuilder X,使用uniapp编写微信小程序
  • Linux简介
  • 下拉框select标签类型
  • PLOS ONE:VR 游戏扫描揭示了 ADHD 儿童独特的大脑活动
  • 基础数学知识-概率论
  • 机器学习05-CNN
  • 守护进程及gdb调试(新手简略版)
  • 工作总结(十二)——迁移svn单项目到gitlab上,保留历史提交记录
  • 02.Spring_IOC详解
  • Evidential Deep Learning和证据理论教材的区别(主要是概念)
  • test ssl java
  • 【C++指南】哈希驱动的封装:如何让unordered_map/set飞得更快更稳?【上】
  • 数据结构学习笔记 :二叉搜索树与高效查找算法详解
  • React 列表渲染基础示例
  • DFS/BFS专练-搞定图论基础!(从海岛问题过渡至图论基础应用C++/C)
  • 无刷电机槽数相同、转子极数不同的核心区别
  • Nacos安装及数据持久化
  • ESP32之本地HTTP服务器OTA固件升级流程,基于VSCode环境下的ESP-IDF开发(附源码)
  • 【Spring Boot】MyBatis入门:连接Mysql数据库、测试单元、连接的常见错误
  • 汇编语言中的数据
  • 基于C++(MFC)的细胞识别程序
  • 人工智能在后端开发中的革命:从架构到运维
  • 前端:uniapp中uni.pageScrollTo方法与元素的overflow-y:auto之间的关联