目录
1 概述
libssh是一个在客户端和服务器端实现SSHv2协议的多平台C库。使用libssh,您可以远程执行程序、传输文件、使用安全透明的隧道、管理公钥等等。本文描述的对libssh客户端功能的C++封装。
libssh下载地址
3 实现
3.3 Scp
Scp类型通过SCP协议管理远程文件,可以上传和下载文件。
3.3.1 Scp定义
class ScpPrivate;
class Session;
class DirPtr;
class Scp
{
public:
Scp(Session const& session);
~Scp();
enum Req {
MewDir = 1, NewFile, Eof, EndDir, Warning };
typedef std::shared_ptr<Scp> Ptr;
bool open(const char* filepath, bool isRead);
bool close();
//for read
int pull_req();
size_t get_size();
const char* get_filename();
int get_permissions();
const char* get_warning();
const char* error();
bool accept_req();
bool deny_req(const char* reason);
ssize_t read(void *buf, size_t count);
//for write
bool mkdir(const char* dirname);
bool leave_dir();
bool mkfile(const char* filename, size_t count);
bool write(const void *buf, size_t count);
DirPtr home() const;
DirPtr root() const;
DirPtr dir(const char* path) const;
private:
friend class Dir;
Scp(Scp const&);
Scp & operator == (Scp const&);
ScpPrivate* d;
};
接口函数:
- open 以只读或只写模式打开文件或目录
- close 关闭文件
- pull_req 拉取请求
- get_size 获取文件大小
- get_filename 获取目录或文件名
- get_permissions 获取访问权限
- get_warning 获取警告信息
- accept_req 接收请求
- deny_req 拒绝请求
- read 读数据
- mkdir 创建目录
- leave_dir 离开目录
- mkfile 创建文件
- write 写数据
- home 返回home目录对象
- root 返回root目录对象
- dir 返回指定目录对象
3.3.2 Scp实现
3.3.2.1 ScpPrivate
class ScpPrivate
{
public:
ScpPrivate(ssh_session s)
: session(s)
, scp(0)
, isOpened(false)
{
}
ssh_session session;
ssh_scp scp;
bool isOpened;
};
3.3.2.2 Scp/~Scp
Scp::Scp(Session const& session)
: d(new ScpPrivate(session.d->session))
{
}
Scp::~Scp()
{