将二进制文件复制到C++中的远程位置
copying binary files to remote location in C++
我正在尝试将本地机器上的hdf5二进制文件复制到远程计算刀片。在Qt应用程序生成所需的目录或文件后,我使用libssh将其复制出来。使用libssh,我可以打开ssh_session,对其进行身份验证,打开通道并发送远程命令。
for (QStringList::iterator it = ipList.begin(); it != ipList.end(); ++it)
{
ssh_session my_session = new ssh_new();
QString ip_address = *it;
ssh_options_set(my_session, SSH_OPTIONS_HOST, ip_address.toStdString().c_str());
// Connect...Authenticate using public key....
QString command = QString("rm -r %2; cp -r %1 %1; cp /local/file.txt /remote/file.txt").arg(local_dir, remote_dir);
execute_remote_command(my_session, command.toStdString().c_str());
// Open channel and execute command
ssh_disconnect(my_session);
ssh_free(my_session);
}
正在为每个单独的计算刀片执行此命令。在每次调用之间,我将关闭和打开一个到下一个刀片的ssh会话。这些文件显示出刀片,但它们似乎已损坏。它们的文件大小完全相同。我还没有找到一种方法来比较各个字节,看看它们有多坏,任何提示都将不胜感激。
当我在一个单独的测试终端程序中运行ssh复制命令时,这些文件似乎使它完好无损,并且在刀片上可读。该问题似乎只在文件从Qt GUI程序中移动时发生。
编辑:因此,深入研究一下问题所在,远程服务器上的文件大小似乎不一样。它似乎缺少大部分字节。最重要的是,当我逐字节检查文件的本地版本时,几乎所有的字节都不同。
事实证明,在调用SSH命令之前,HDF5编写器没有正确关闭。我通过动态分配别人编写的自定义H5类解决了这个问题,并确保在调用SSH命令之前将其删除。事实证明,编写HDF5读写类的人没有正确处理文件打开和关闭,也没有提供这样做的功能
下面是我所说的一个例子。
HDF5writer_class *hdf5_writer = new HDF5writer_class();
hdf5_writer->create_file("/local/machine/hdf5_file.h5");
// ... add the data to the file
delete hdf5_writer;
// Open SSH Session and run the copy commands
长话短说,在你试图复制之前,确保你正在写的文件已经关闭并释放以供使用。
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 在不同的内存位置同时写入 std::d eque 是否线程安全?
- 我们如何准备小内存池,其中每个线程可以独立访问某些位置范围?
- CUDA:来自不同翘曲但相同块的 2 个线程尝试写入相同的共享内存位置:危险?
- 位置实用程序例程与使用类型相同的命名空间
- 不同的线程同时访问不同的内存位置
- CUDA 线程在全局内存中的私有位置写入时出现错误结果
- 访问冲突读取位置.堆损坏.提升线程
- 对不同线程中同一位置的两次轻松写入是否总是以相同的顺序被其他线程看到
- 建议我错误可能位于此代码,分段错误,多线程网络模拟器中的位置
- 标准库中的某个位置已经存在线程安全值类型
- C++-如何找到当前线程的创建位置
- 线程c++,访问冲突读取位置x错误
- 确定Windows线程是否处于临界区或类似的位置
- 如果所有线程都写到不同的位置,多个线程可以同时写到一个文件吗?
- <向量>线程安全在不同位置读取/写入吗?
- 访问冲突读取位置0xfeeefef2多线程编程c++窗口