我可以访问一些有大量数据的服务器。我无法复制计算机上的全部数据。
我无法在服务器上编译我想要的程序,因为服务器没有我需要的所有库。
我认为服务器管理员不会很高兴看到我来并要求他为我安装一些库......
所以,我尝试弄清楚是否有一种方法可以像这样打开文件,
FILE *fopen(const char *filename, const char *mode);
或
void std::ifstream::open(const char* filename, ios_base::openmode mode = ios_base::in);
但通过 SSH 连接。然后像我对通常的程序所做的那样读取文件。
计算机和服务器都运行linux
最佳答案
我假设您正在使用 Linux 笔记本电脑,而远程计算机是某种 super 计算机。
第一个非技术建议:首先请求许可才能远程访问数据。在某些工作场所,即使技术上可行,您也不允许这样做。
你可以使用libssh为此目的,但您需要一些编码并阅读其文档。
您可以考虑使用一些 FUSE文件系统(在您的笔记本电脑上),例如一些sshfs
;然后您就可以访问一些 super 计算机文件(如 /sshfilesystem/foo.bar
)。这可能是最慢的解决方案,而且可能不是一个非常可靠的解决方案。我真的不推荐它。
您可以请求使用 NFS 的许可坐骑。
也许你可以考虑一些HTTPS使用一些 HTTP/HTTPS 客户端库(如 libcurl)访问(如果远程计算机有您的文件) (或者反过来,一些 HTTP/HTTPS 服务器库,如 libonion )
你可以(但要先征求许可!)使用一些 TLS连接(例如,在远程 super 计算机上手动启动类似服务器的程序)可能通过 OpenSSL或libgnutls
最后,您应该考虑安装(即礼貌地询问远程 super 计算机上的安装)或使用一些 database远程计算机上的软件(例如 PostgreSQL 或 MariaDB 或 Redis 或 MongoDB 服务器)并使您的程序成为数据库客户端应用程序...
顺便说一句,如果您在随机访问中访问几十个 TB 大小的文件(每次运行读取其中的几千字节),或者一百万个文件,其中给定的运行仅访问其中的十几个文件,情况可能会有所不同通过顺序读取,每个文件具有合理的大小(几兆字节)。换句话说,DNA数据、视频电影、HTML文档、源代码……都是不同的情况!
关于c++ - 有什么方法可以通过 SSH 连接打开和读取文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32658031/