我有一个C ++应用程序,该应用程序使用SSH召唤到服务器的连接.我发现有时SSH会话在命令召唤服务器已退出后很长时间就搁置了.查看SSH的Centos4 Man页面,我会看到以下内容: The session terminates when the command or shell on the remote machine exits and all X11 and TCP/IP connections have been closed. The exit status of the remote program is returned as the exit status of ssh. 我看到命令已经退出,所以我想并非所有X11和TCP/IP连接都已关闭.我如何弄清楚这些SSH中的哪个正在等待,以便我可以修复召唤命令的C ++应用程序以清理留下的任何使SSH打开的东西. 我想知道为什么这种故障仅发生在某些时间而不发生在每次调用中?它似乎发生了大约50%的时
以下是关于 c++ 的编程技术问答
我开发了一个跨平台QT应用程序.现在,我需要/想在带有GUI表单加载的远程主机上运行它. 我知道两种方法: 通过ssh 附加到QTCreator上的控制台上的远程显示器(可能是虚拟)上的打开应用程序 与远程X会话一起运行,就像使用ssh -X或-Y一样. 当我通过远程设备上的QTCreator运行应用程序时,它说 QXcbConnection: Could not connect to display 当我使用ssh -Y连接到远程主机并运行我的应用程序时,它说 QXcbConnection: Could not connect to display localhost:10.0 Aborted 在我的本地主机和通过VNC上的远程主机上,应用程序正常工作. ssh -Y user@host xclock也可以正常工作 - 打开它的形式. 主机系统是 ubuntu 16.04 lts x64 ,目标系统 ubuntu 16.04 lts x8
我在QT应用程序中对SSH有问题.我需要运行一个命令,该命令在远程服务器上删除文件.我试图使用Qprocess类来实现它.因此,我将" SSH"作为命令的名称和必要的args传递.通常,它看起来像这样: QStringList params; params.append(" user@" + ::host + " \"rm /tmp/" + ::fileName + "\""); d->impDelProcess->start("ssh", params); ,但是毕竟它一直在询问一个密码,尽管我生成了SSH键并复制了远程服务器的公共密钥.此外,当我在终端中运行上面的命令时: ssh user@host "rm /path/fileName" 它的工作原理.该文件已删除,没有询问密码.因此,问题在QProcess中.有什么方法可以摆脱密码?谢谢! 解决方案 当您使用字符串列表时,这些是单独的参数.尝试以下操作: par
在我的项目中,我需要在服务器和多个客户端之间传输文件. 客户和服务器之间的通信应加密, 应该通过用户名和密码进行身份验证 该协议应该是一个常见的协议,所以我考虑了sftp. SSH有两个C/C ++库:libssh和libssh2, 其中只有第一个也提供服务器功能. 有一个用于客户模块的libssh的API文档, 涉及子模块 sftpppppppp ,已充分记录. 但是对于 server api我只能找到基本的SSH函数. libssh是否提供服务器端SFTP支持? 解决方案 是的,您可以使用libssh实现SFTP服务器.它只是没有被淘汰. 请参阅sftp.h文件末尾的函数: http://git.libssh.org/projects/libssh.git/tree/include/libssh/sftp.h 以及 libssh.git/tree/src/sftpserver.c 我们很快将发布具有改进服务器支持的新版本.
我正在寻找一个如何使用libssh2设置SSH端口转发的示例.我看了API,但是在端口转发区域的文档方式很少. 例如,当使用Putty's plink时,有远程端口要聆听,还有应将流量发送到的本地端口.设置此设置是开发人员的责任吗?有人可以举个例子吗? 另外,将远程端口带到本地端口的示例将很有用.我使用libssh2_channel_direct_tcpip_ex()吗? ,如果需要,我愿意放赏金. 解决方案 libssh2源代码包括几年以来的直接_tcpip.c示例,该示例演示了如何创建直接TCPIP SSH频道,并且自上周上周一个forward-tcpip.c示例以来SSH频道. direct -tcpip是ssh -l使用的,而向前tcpip是ssh -r使用的. libssh2用户始终处理实际数据. libssh2照顾了SSH频道,别无其他.您可以从研究SSH RFC(尤其是RFC 4254)中获得显着受益匪浅,以了解更多有关每种频道类型的确
有些人可以帮助我使用Visual Studio 2017在Windows上编译Libssh2. 我发现的唯一一件事太老了,已经过时了. 我从github下载了libssh2,然后运行cmake libssh2,然后cmake -P cmake_install.cmake,但找不到安装文件" libssh2.lib". 我被困在这里! ********更新1 ********* crypto_backend缺少,我试图用openssl编译并获得许多未解决的符号. ********更新2 ********* 好!我使用了cmake-gui,摆脱了未解决的符号,但是现在我对某些标头文件有问题. libssh2 var类型未定义.某种包括缺失....? 解决方案 我可以在Windows 10环境中编译Libssh2(我很感兴趣). 环境: Windows 10 x64. Visual Studio社区2017版本15.2(26430.4)
我想将文件从客户端复制到远程服务器,但是我不明白如何使用libssh库SFTP API进行. 情况是:SSH会话是打开的,SFTP会话也打开了,我可以创建一个文件,并通过Libssh的集成函数在客户端到服务器中写入. 我没有找到一种简单的方法将文件从客户端复制到服务器的简单函数,例如 sftp_transfile(sourcefile(例如c:\ my document \ my document \ hello world.txt),remotefile(/home/home/user/hello world.txt),右(读写))? 通过我从教程中理解的内容,它首先在远程位置(服务器)中创建文件,然后使用此代码行打开此文件: file = sftp_open(sftp, "/home/helloworld.txt",access_type,1); 之后,该文件是在服务器上创建的,然后用缓冲区写入此创建的文件: const char *hellowor
我很难理解SSE内在的用法将某些SIMD计算的结果存储回"正常变量".例如,_mm_store_ps intinsic在"英特尔内在指南"中描述: void _mm_store_ps(float* mem_addr,__m128 a) 存储128位(由4个包装的单精制组成(32位) 浮点元素)从一个进入内存. mem_addr必须对齐 在16字节边界或一般保护例外可能是 生成. 第一个参数是指向具有32bits的浮子的指针.但是描述指出,固有的将从a中复制128位. mem_addr是否需要是4个浮子的数组? 我如何仅在a中访问特定的32位元素并将其存储在单个浮子中? 我从概念上错过了什么? 是否有更好的选项,然后_mm_store_ps intinsic? 这是一个简单的结构,其中dosomething()添加了结构的1至x/y.缺少的是如何将结果存储回X/Y的部分,而仅使用较高的32位宽元素2和3,而1&0未使用. struct vec2 {
我的程序大量使用了使用较大灰度图像的双线性插值提取的小型子图像. 我为此目的使用以下功能: bool extract_patch_bilin(const cv::Point2f &patch_ctr, const cv::Mat_ &img, cv::Mat_ &patch) { const int hsize = patch.rows/2; // ... // Precondition checks: patch is a preallocated square matrix and both patch and image have continuous buffers // ... int floorx=(int)floor(patch_ctr.x)-hsize, floory=(int)floor(patch_ctr.y)-hsize; if(floorx
我需要将float矢量(__M128)转换为整数向量(__M128i),并且我正在使用_mm_cvtps_epi32,但是我没有得到预期值.这是一个非常简单的示例: __m128 test = _mm_set1_ps(4.5f); __m128i test_i = _mm_cvtps_epi32(test); 我得到的调试器输出: (lldb) po test ([0] = 4.5, [1] = 4.5, [2] = 4.5, [3] = 4.5) (lldb) po test_i ([0] = 17179869188, [1] = 17179869188) (lldb) 如您所见,生成的整数是.. 17179869188?从4.5?为什么只有两个值? _mm_cvtps_epi32应将4个包装的32位浮点值转换为4个包装的32位整数. 在此示例中, 解决方案 调试器将__m128i值解释为两个64位整数,而不是您期望的四个32位.实际转换是正确的.
我搜索了GCC 4.8.1文档,但找不到答案: 我有一些SSE4.1代码和后备代码,在运行时,我检测到系统是否支持SSE4.1,如果不支持SSE 4.1,我使用后返回代码. 到目前为止还不错,但是使用最新的海湾合作委员会版本,这就是发生的事情: - 我的应用程序崩溃,因为SSE4.1每次进行字符串比较 时,都会在整个代码中传播. 由于我正在使用-msse41编译所有文件,这听起来很合理,但我的代码崩溃了.我的问题是:有什么方法可以将SSE41的用法限制为使用SSE4.1的代码?不幸的是,这些是到处都使用的标头文件,因此很难将这些翻译单元与MSSE41 编译 解决方案 在GCC 4.8时,您可以使用多个函数,请参见
我一直在构建需要SSE2指令集的多个项目.添加-march=native如 sse2指令设置 . 但是,在我需要的3个项目中,Makefile中的GCC命令易于找到和编辑Makefile的工作.现在,我解决了Cmake产生的更复杂的Makefile.我相信它会在其他文件夹中产生更多的makefiles,然后运行它们等.因此,仅添加简单的-march=native既不是可取又不容易的,并且会花费大量时间,如果毕竟是可行的. . 有没有办法以某种方式始终启用SSE2?我用谷歌搜索了一下,但找不到东西. 鉴于我从Github下载的非Makefiles的内部-march=native的事实,这使我相信确实有某种方法可以将其设置在GCC/G ++级别上? 我找到了此-MFPMATH = SSE标志,但无法制定正确的GCC/G ++命令(如果是相关的,则). 你能帮我吗? 解决方案 您可以添加CMakeLists.txt 中的编译器选项-march=nati
我在XMM寄存器内有一堆包装的浮子(使用SSE Internics): __m128 xmm = _mm_set_ps(4.0f, 3.0f, 2.0f, 1.0f); 我想一次将所有这些转换为整数.我找到了一个内在的,它可以执行我想要的(_mm_cvtps_pi16()),但是它产生了4x16位短而不是成熟的 int .一种称为_mm_cvtps_pi32()的固有性得出 int ,但仅适用于xmm中的两个较低值.我可以使用它,提取值,移动物品并再次使用它,但是有一种简单的方法吗?为什么不直接有32位填充的浮点 - > 32位整数指令?当然都适合XMM寄存器的同一空间? 编辑:好吧,我现在看到_mm_cvtps_pi32()返回__m64而不是__M128,这意味着它在MMX式MM ...寄存器上运行.这可以解释为什么它仅返回两个int,但现在我想知道: 编译X64时会遇到麻烦吗?据报道,那里不支持__ -M64 ... SSE推出时为什么不扩展此指令?