libssh C++封装之六(Dir)

news2024/9/22 7:35:33

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.coloradmin.cn/o/1678773.html

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

相关文章

so-vits-svc:AI翻唱,语音克隆

前言 这个项目是为了让开发者最喜欢的动画角色唱歌而开发的,任何涉及真人的东西都与开发者的意图背道而驰。 项目地址:https://github.com/svc-develop-team/so-vits-svc/blob/4.1-Stable/README_zh_CN.md 安装 可以自行配置,应该也不难 …

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

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

新手也能看懂的前端单元测试框架:Vitest

单元测试的概念及作用 1.什么是单元测试? 单元测试是测试中的一个重要环节,它针对软件中的最小可测试单元进行验证,通常是指对代码中的单个函数、方法或模块进行测试。 单元测试旨在确定特定部分代码的行为是否符合预期,通过针…

618值得入手的数码好物如何选?热门爆款数码好物清单分享

618购物节即将到来,作为年中最重要的购物狂欢盛会之一,各大电商平台将推出众多优惠活动。如果你正准备购买数码产品,那么不要错过这个机会。在本文中,我们将为你介绍几款值得关注的热门数码产品,帮助你在618购物节中做…

linux使用教程(命令介绍、命令格式和命令的使用技巧)

一、命令的格式 1.1 打开终端的方式 ubuntu中的命令基本都是在终端执行的 打开终端的方式: 第一种方法:在ubuntu桌面中鼠标右键选择“打开终端” 第二种方法:使用快捷键ctrl alt t 1.2 终端提示符 stuqfedu:~$ 对于这个提示符 stu&…

css画三角形

使用border div {border-top: 50px solid yellowgreen;border-bottom: 50px solid deeppink;border-left: 50px solid bisque;border-right: 50px solid chocolate; }如果想要单个的三角形,把其它三边的颜色设为transparent即可 使用 conic-gradient 绘制三角形 …

Mysql数据库二进制日志导致磁盘满了处理过程

数据库的二进制日志是数据库管理系统(DBMS)用来记录所有对数据库进行修改的操作的记录。这种日志对于数据库的备份、恢复、复制和审计等操作至关重要。 以MySQL数据库为例,二进制日志(Binary Log)记录了所有更改数据的…

无代码无国界:我们正在走向软件安全的狂野西部吗?

我们使用的几乎所有东西都是基于代码构建的,从汽车到智能冰箱再到门铃。在企业中,无数的应用程序保持设备、工作流程和操作的运行。因此,当早期的无代码开发平台于 2010 年推出时,承诺为公民开发人员提供更易于访问的应用程序开发…

QT状态机2-含终止状态的嵌套状态机

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

有哪些好用的3dMax大神插件?

有哪些好用的3dMax大神插件? Mesh Insert 3DMAX网格插入插件Mesh Insert,在选择的面上安门窗、打螺丝、挖洞、插入眼耳口鼻及其它网格模型等可以分分钟搞定!它通过将面选择替换为库中的资源来加快建模过程。非常适合硬网格和有机建模&#xf…

NVM镜像源报错:Could not retrieve https://npm.taobao.org/mirrors/node/index.json.

NVM镜像源报错:Could not retrieve https://npm.taobao.org/mirrors/node/index.json. 淘宝前端node镜像源已更换 NVM安装教程:http://t.csdnimg.cn/dihmG 背景 笔者在安装版本切换工具NVM时,配置完镜像源后,在控制台输入&#x…

CSS 根据子元素选择父元素,并设置父元素的样式

场景举例&#xff1a;当子元素有增加了一个class时&#xff0c;需要影响其父元素的样式 可以使用":has"伪类来实现选择父元素的效果 <style>.parent:has(.child){background-color: #eee;}p{width:100px;border:1px solid #000;} </style> <body>…

C语言收尾 预处理相关知识

一. 预处理详解 1.1 预定义符号 FILE //进行编译的源文件LINE //文件当前的行号DATE //文件被编译的日期TIME //文件被编译的时间FUNCTION //文件当前所在的函数STDC //如果编译器遵循ANSI C标准&#xff0c;其值为1&#xff0c;否则未定义 这些预定义符号都是语言内置的 我们…

鸿蒙内核源码分析 (内存池管理) | 如何高效切割合并内存块

动态分配 系列篇将动态分配分成上下两篇&#xff0c;本篇为下篇&#xff0c;阅读之前建议翻看上篇。 鸿蒙内核源码分析(TLFS算法) 结合图表从理论视角说清楚 TLFS 算法鸿蒙内核源码分析(内存池管理) 结合源码说清楚鸿蒙内核动态内存池实现过程&#xff0c;个人认为这部分代码…

保研机试之【execve函数】

execve 参考&#xff1a;fork&#xff08;&#xff09;函数两次返回_fork是如何返回两次的-CSDN博客 setjmp/longjmp 还有E&#xff1a;

解决GitHub提交后不显示自己的头像 显示另一个没见过的账号?

问题说明 最近换了几台电脑开发项目&#xff0c;提交到github&#xff0c;看了下提交记录&#xff0c;怎么冒出来不是我的账号头像&#xff1f; 什么鬼i 原因分析 github是按照你注册时候填的邮箱来查找账号&#xff0c;并显示在提交记录上面的。如果账号找不到头像就出不来…

knife4j在线文档 测试框架

一、Knife4j介绍&#xff1a; 1.1.介绍&#xff1a; Knife4j是基于SpringBoot构建的一个文档生成工具&#xff0c;它可以让开发者为我们的应用生成在线API文档&#xff1b; 目的是可以更加方便的基于API文档进行测试。 生成的文档还可以导出&#xff0c;然后给到前端开发团队…

美国服务器托管的优势

很多企业会选择美国服务器托管&#xff0c;那么美国服务器托管有哪些优势&#xff0c;rak部落为您整理美国服务器托管的优势。 美国服务器托管的优势可能体现在以下几个方面&#xff1a; 高性能和稳定性&#xff1a;美国的数据中心和网络基础设施非常先进&#xff0c;能够提供高…

「Python绘图」绘制同心圆

python 绘制同心圆 一、预期结果 二、核心代码 import turtle print("开始绘制同心圆") # 创建Turtle对象 pen turtle.Turtle() pen.shape("turtle") # 移动画笔到居中位置 pen.pensize(2) #设置外花边的大小 # 设置填充颜色 pen.fillcolor("green&…

高通QCS6490开发(三):点亮板卡

QCS6490是高通公司针对高端物联网终端而优化的SoC&#xff0c;在性能和功耗上有最优的平衡。《高通QCS6490 AIoT应用开发》是介绍如何基于QCS6490平台完成AIIoT的应用开发的系列文章。 本期主要介绍介绍如何点亮FV01开发板。 以下步骤介绍如何点亮FV01开发板步骤 1、将12V/5A…