libssh C++封装之六(Dir)

1 概述

  libssh是一个在客户端和服务器端实现SSHv2协议的多平台C库。使用libssh,您可以远程执行程序、传输文件、使用安全透明的隧道、管理公钥等等。本文描述的对libssh客户端功能的C++封装。
libssh下载地址

3 实现

3.5 Dir

Dir类型管理远程路径,通过SFTP和Channel实现(有的服务端不支持SFtp).
类图

3.5.1 Dir定义

3.5.1.1 Dir
class DirPrivate;
class SFtp;
class Scp;
class FileInfoPtr;
class FileInfos;
class Dir
{
public:enum Filter {Dirs        = 0x001,Files       = 0x002,Drives      = 0x004,NoSymLinks  = 0x008,AllEntries  = Dirs | Files | Drives,TypeMask    = 0x00f,Readable    = 0x010,Writable    = 0x020,Executable  = 0x040,PermissionMask    = 0x070,Modified    = 0x080,Hidden      = 0x100,System      = 0x200,AccessMask  = 0x3F0,AllDirs       = 0x400,CaseSensitive = 0x800,NoDot         = 0x2000,NoDotDot      = 0x4000,NoDotAndDotDot = NoDot | NoDotDot,NoFilter = -1};enum SortFlag { Name        = 0x00,Time        = 0x01,Size        = 0x02,Type        = 0x03,Property    = 0x04,Unsorted    = 0x07,SortByMask  = 0x07,DirsFirst   = 0x08,Reversed    = 0x10,IgnoreCase  = 0x20,DirsLast    = 0x40,LocaleAware = 0x80,NoSort = -1};Dir(SFtp const& sftp, const char* path);Dir(Scp const& scp, const char* path);~Dir();bool is_root() const;const char* dirname() const;FileInfos fileinfos(Filter filter = NoFilter, SortFlag sortFlag = NoSort);bool mkdir(const char* path);bool rmdir(const char* path);bool mkfile(const char* filename);bool rmfile(const char* filename);bool rename(const char *original, const  char *newname);bool chmod(const char* filename, uint16_t mode);static std::string dirname(const char* filename);static std::string basename(const char* filename);
private:void sort(FileInfos &fileInfos, SortFlag sortFlag);Dir(Dir const&);Dir & operator == (Dir const&);DirPrivate* d;
};

接口函数:

  • is_root 是否root目录
  • dirname 返回路径名称
  • fileinfos 返回该目录文件列表
  • mkdir 创建目录
  • rmdir 删除目录
  • mkfile 创建文件
  • rmfile 删除文件
  • rename 文件目录改名
  • chmod 修改文件权限
  • dirname 获取文件目录名
  • basename 获取文件基本名称
3.5.1.2 DirPrivate
class DirPrivate
{
public:DirPrivate(const char * p): path(p){}virtual ~DirPrivate() {}virtual bool opendir() = 0;virtual sftp_attributes readdir() = 0;virtual void closedir() = 0;virtual bool mkdir(const char* path) = 0;virtual bool rmdir(const char* path) = 0;virtual bool mkfile(const char* filename) = 0;virtual bool rmfile(const char* filename) = 0;virtual bool rename(const char *original, const  char *newname) = 0;virtual bool chmod(const char* filename, uint16_t mode) = 0;bool is_relative_path(const char * path);inline bool is_empty(const char * path) { return !path || *path == 0; }inline std::string absolute_path(const char * p) { return path + "/" + p; }std::string path;
};

接口定义:

  • opendir 打开目录开始遍历
  • readdir 读取目录信息
  • closedir 关闭目录遍历
  • mkdir 创建目录
  • rmdir 删除目录
  • mkfile 创建文件
  • rmfile 删除文件
  • rename 文件改名
  • chmod 修改文件权限
  • is_relative_path 判断路径是否是相对路径
  • is_empty 判断路径是否为空
  • absolute_path 返回绝对路径
3.5.1.3 SftpDirPrivate

基于SFTP协议实现DirPrivate接口

class SftpDirPrivate : public DirPrivate
{
public:SftpDirPrivate(const char * p, sftp_session s): DirPrivate(p), sftp(s), dir(0){}bool opendir() override;sftp_attributes readdir() override;void closedir() override;bool mkdir(const char* path) override;bool rmdir(const char* path) override;bool mkfile(const char*

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/703834.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ENZO--Leptin (human) ELISA kit

瘦素(Leptin)是由ob基因编码、在脂肪组织中生成的一种脂肪代谢调控产物,在代谢和调控体重等方面发挥重要作用。它通过下丘脑中的瘦素受体发出信号,降低食欲,增加能量消耗。在外周组织中,瘦素能拮抗胰岛素信号传导,增加…

Java开发大厂面试第04讲:深入理解ThreadPoolExecutor,参数含义与源码执行流程全解

线程池是为了避免线程频繁的创建和销毁带来的性能消耗,而建立的一种池化技术,它是把已创建的线程放入“池”中,当有任务来临时就可以重用已有的线程,无需等待创建的过程,这样就可以有效提高程序的响应速度。但如果要说…

LLama3大模型本地部署 仅需6步完成对话模型本地安装部署。附送可视化ui安装、自定义模型目录,修改模型保存地址,第三方微调模型、中文模型下载地址

本篇分为三部分 一:6步完成llama3大模型本地部署 二:8步完成llama3可视化对话界面安装 三:重设模型文件路径 四:微调模型、中文模型下载资源分享 一、LLama3 大模型本地部署安装 首先去mata官网下载ollama客户端 Ollama 选择合适…

论:即时战略RTS游戏的小地图采用 自下而上的汇报式 还是 自上而下的查找式?

关键词:RTS 小地图 游戏设计 思路 卫星 位置映射 阵营 更新 汇报 询问 UE4 UE5 Unreal Engine 前言 你是否想过类似红色警戒的战略小地图的要素是采用何种方式更新数据的。大量数据实时更新,考虑频率,运行效率,开发中如何选型&a…

价格战开卷!字节发布豆包大模型,比行业便宜99.3%

豆包大模型正式亮相 5月15日,在2024春季火山引擎Force原动力大会上,字节跳动自研豆包大模型正式亮相。 (图源:证券时报) 火山引擎是字节跳动旗下云服务平台,据火山引擎总裁谭待介绍,豆包大模型…

民航电子数据库:select查询时部分字段缺失

目录 前言异常排查原因解决使用systemPath标签引入本地Jar包后无法打包 前言 1、对接民航电子数据库 2、框架为shardingsphere caedb mybatis 3、部分SQL查询时,会出现字段缺失的情况 4、查看日志打印出来的SQL,字段并未缺失 异常 这里省略SQL语句…

✅什么是时间轮?

一、问题解析 时间轮算法(Time Wheel Algorithm)是一种用于处理定时任务和调度的常见算法。 时间轮算法主要需要定义一个时间轮盘,在一个时间轮盘中划分出多个槽位,每个槽位表示一个时间段,这个段可以是秒级、分钟级、…

Invalid bound statement (not found) 六种解决方法

前五种参考博文: Invalid bound statement (not found) 五种解决方法-CSDN博客 第六种: 在启动类上加上MapperScan,指定扫描包

web前端框架设计第八课-表单控件绑定

web前端框架设计第八课-表单控件绑定 一.预习笔记 1.v-model实现表单数据双向绑定 2.搜索数据的实现 3.全选案例实现1—JQ方法 4.单选案例实现 5.数据级联(二级级联) 6.v-model中的修饰符 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药&#xff0c…

DolphinScheduler(海豚调度)- docker部署实战

1.官方文档 https://dolphinscheduler.apache.org/zh-cn/docs/3.2.1/guide/start/docker 2.docker环境安装 版本情况(这个地方踩了不少坑):docker-26.1.2,docker-compose-v2.11.0。 具体可使用我上传的安装包,一键安…

C++ | string详解

1、string是什么 string是STL文档的容器之一,是一个自定义类型,是一个类,由类模板basic_string实例化出来的一个类; 类模板basic_string实例化出来了四个类,如下图所示; 实例化出的这四个类不同的是他们的编…