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
{
<