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.mzph.cn/diannao/12854.shtml

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

相关文章

uni u-form-item 只有图标点击有效

如下,输入的地方是个选择项,代码如下: <u-form-item class=u-form-item label="监督主题" prop="themeName" borderBottom ref="item1" @click="openPopup(0)" > <u--input v-model="form.themeNam…

PTA--《面线对象程序设计》作业3-继承与多态

目录 一&#xff1a;函数题 6-2 长方形长方体类&#xff1a; 6-1 从抽象类shape类扩展出一个圆形类Circle 二&#xff1a;编程题 7-1&#xff1a;周长计算器 一&#xff1a;函数题 6-2 长方形长方体类&#xff1a; 定义一个长方形类Rectangle&#xff0c;拥有长、宽属性…

定时发圈操作介绍

1、登陆已有的账号&#xff0c;点击到"朋友圈"功能 2、选择要发圈的微信号&#xff0c;编辑发圈的文案内容 3、自定义想要的时间点 4、点击"立即发送" 5、可进行跟圈

【JavaScript】eval

JavaScript 中的 eval() 是一个全局函数&#xff0c;它接受一个字符串参数&#xff0c;并将其作为 JavaScript 代码进行解析和执行&#xff1b;如果接收的不是一个字符串&#xff0c;则会将传入的数据直接返回。 eval 的基本用法&#xff1a; eval() 函数将传入的字符串参数作为…

深度解析 Spring 源码:解密AOP切点和通知的实现机制

文章目录 深度解析 Spring 源码&#xff1a;解密AOP切点和通知的实现机制一、Spring AOP的基础知识1.1 AOP的核心概念&#xff1a;切点、通知、切面等1.2 Spring AOP与传统AOP的区别和优势 二、深入分析切点和通知的实现2.1 研究 Pointcut 接口及其实现类2.1.1 Pointcut 接口2.…

powershell 防止休眠或屏幕关闭并定时截屏保存

powershell 防止休眠或屏幕关闭 01 前言 因工作需要&#xff0c;需要在用户的机器上进行操作&#xff0c;有些工作比较耗时、耗CPU&#xff0c;配置也不高&#xff0c;因而就不能用这台机器同时干太多活&#xff0c;又不能干盯着啥也干不了&#xff0c;但是一段时间不操作&am…

巩固学习9

show-me-the-code题目001 #做为 Apple Store App 独立开发者&#xff0c;你要搞限时促销&#xff0c;为你的应用生成激活码&#xff08;或者优惠券&#xff09;&#xff0c;使用 Python 如何生成 200 个激活码&#xff08;或者优惠券&#xff09;&#xff1f; import random a…

延迟队列有哪些

延迟队列 与时间相关场景的应用,经常用于延后多少时间执行什么任务。 java 自带延迟队列 class Solution {public static void main(String[] args) throws InterruptedException {DelayQueue<DelayMealTask> queue = new DelayQueue<>();DelayMealTask task =…

MySQL存储过程练习

DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 学号,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) unsigned DEFAULT NULL,sex char(2) DEFAU…

数据库审计系统Yearning使用笔记

一、启动 1、初始化MySQL 启动mysql docker run -d --namemysql -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot mysql:5.7创建数据库&#xff0c;链接数据库并执行以下创建库的脚步&#xff0c;注意字符集 create database yearning char set utf8mb42、启动Yeelabs 需要执行…

CDGA|揭秘移动物联网数据治理秘诀,轻松提升数据质量,赋能智慧未来

在数字化浪潮汹涌的今天&#xff0c;移动物联网作为连接物理世界与数字世界的桥梁&#xff0c;其数据治理的重要性日益凸显。高质量的数据不仅是企业决策的基石&#xff0c;更是推动行业智能化、精细化发展的关键。本文将为您揭秘移动物联网数据治理的技巧&#xff0c;助您轻松…

如何设计实用的ITSM自助服务台

在现代IT服务管理&#xff08;ITSM&#xff09;领域中&#xff0c;自助服务台已成为IT运维环境的核心组件。它作为企业内部信息中心与其他部门用户之间的桥梁&#xff0c;一个以用户为中心的平台&#xff0c;更注重用户的自主性和自助能力&#xff0c;使用户能够直接访问所需的…

微软宣布GPT-4o模型,可在 Azure OpenAI上使用

5月14日&#xff0c;微软在官网宣布&#xff0c;OpenAI最新发布的多模态模型GPT-4o&#xff0c;可以在 Azure OpenAI 云服务中使用。 据悉&#xff0c;GPT-4o支持跨文本、视频、音频多模态推理&#xff0c;例如&#xff0c;通过GPT-4o打造一个AI助手&#xff0c;用于辅导孩子解…

halcon学习之形状匹配

算子 create_shape_model&#xff08;&#xff09; 创建一个用于匹配的形状模型 create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID) 参数 Template&#xff1a; NumLevels&#…

基于NIOS-II软核流水灯和串口通信实现

文章目录 一、创建工程二、系统设计1. 在 “component library” 标签栏中找到 “Nios II Processor” 后点击 Add2. 在 ”Component Library” 标签栏中的查找窗口输入 jtag 找到 ”JTAG UART ”&#xff0c;然后点击 Add3. 添加片上存储器 On-Chip Memory(RAM)核4. 查找窗口输…

做简单易用的GIS资源管理软件

在室外资源管理领域&#xff0c;采用基于GIS的解决方案已成为主流趋势&#xff0c;旨在实现资源的高效利用和管理。GIS技术结合资源对象的规划、定位和监控&#xff0c;为企业提供全面的管理方案&#xff0c;从而优化资源使用、提高运营效率和降低成本。 然而&#xff0c;许多资…

龙迅LT8911EX LVDS桥接到EDP,支持4K30HZ分辨率

龙迅LT8911EX描述&#xff1a; Lontium LT8911EX是LVDS到eDP转换器&#xff0c;具有单端口或双端口可配置的LVDS接收器&#xff0c;有1个时钟通道和最多8个数据通道&#xff0c;每个数据通道最大运行1.2Gbps&#xff0c;最大输入带宽为9.6Gbps。转换器将输入LVDS数据去序列化&…

OpenNJet产品体验:探索无限可能

文章目录 前言一、OpenNJet是什么&#xff1f;二、OpenNJet特性和优点三、OpenNJet功能规划四、OpenNJet快速上手五、OpenNJet的使用总结 前言 现代社会网络高速发展&#xff0c;同时也迎来了互联网发展的高峰&#xff0c;OpenNJet作为一个基于NGINX的面向互联网和云原生应用提…

掏心经验分享,软考中项0基础入门篇!

想备考下半年中项&#xff08;系统集成项目管理工程师&#xff09;的朋友&#xff0c;不知道如何了解软考中项&#xff0c;今天给大家整理一篇关于我自己在备考软考时的一些考量和踩过的一些坑。&#xff08;无广&#xff0c;放心看&#xff09; 很多小伙伴总是听大家说软考中…

NGM-SLAM:首创融合神经辐射场子图的3DGS-SLAM,问鼎SOTA!

论文标题&#xff1a; NGM-SLAM: Gaussian Splatting SLAM with Radiance Field Submap 论文作者&#xff1a; Mingrui Li, Jingwei Huang, Lei Sun Aaron, Xuxiang Tian, Tianchen Deng, Hongyu Wang 导读&#xff1a; 3DGS技术因其性能卓越而备受关注&#xff0c;3DGS-SLA…