1 概述
libssh是一个在客户端和服务器端实现SSHv2协议的多平台C库。使用libssh,您可以远程执行程序、传输文件、使用安全透明的隧道、管理公钥等等。本文描述的对libssh客户端功能的C++封装。
libssh下载地址
3 实现
3.6 File
File类型可以读写远程文件。
3.6.1 File定义
3.6.1.1 File
class FilePrivate;
class SFtp;
class Session;
class File
{
public:File(SFtp const& sftp);File(Session const& session);~File();typedef std::shared_ptr<File> Ptr;void set_filesize(uint64_t filesize);bool open(const char *filename, int accesstype, mode_t mode);bool close();void set_noblocking(bool enable);ssize_t read(void *buf, size_t count);ssize_t write(const void *buf, size_t count);int seek(uint32_t new_offset);int seek(uint64_t new_offset);uint64_t tell();void rewind();
private:File(File const&);File & operator == (File const&);FilePrivate* d;
};
接口函数:
- set_filesize 设置文件大小
- open 打开文件
- close 关闭文件
- set_noblocking 设置非阻塞模式
- read 读数据
- write 写数据
- seek 这只文件读写位置
- tell 返回文件读写位置
- rewind 重置文件读写位置
3.6.1.2 FilePrivate
class FilePrivate
{
public:FilePrivate(): filesize(0){}virtual ~FilePrivate() {}virtual bool open(const char *file, int accesstype, mode_t mode) = 0;virtual bool close() = 0;virtual ssize_t read(void *buf, size_t count) = 0;virtual ssize_t write(const void *buf, size_t count) = 0;virtual void set_noblocking(bool /*enable*/) {}virtual int seek(uint32_t /*new_offset*/) { return -1; }virtual int seek(uint64_t /*new_offset*/) { return -1; }virtual uint64_t tell() { return -1; }virtual void rewind() {}uint64_t filesize;
};
接口定义:
- open 打开文件
- close 关闭文件
- read 读数据
- write 写数据
- set_noblocking 设置非阻塞模式
- seek 设置文件读写位置
- tell 返回文件读写位置
- rewind 重置文件读写位置
3.6.1.3 SftpFilePrivate
基于SFTP协议实现FilePrivate接口
class SftpFilePrivate : public FilePrivate
{
<