【问题标题】:How to read a file from a remote device from C program and Ubuntu OS? [closed]如何从 C 程序和 Ubuntu 操作系统从远程设备读取文件? [关闭]
【发布时间】:2015-06-24 11:11:38
【问题描述】:

我正在尝试读取位于远程设备上的文件,它具有 Debian 操作系统。 我的 C 程序在带有 Eclipse 的 Ubuntu 上运行。两个设备通过 USB 数据线连接。我可以使用 ssh 从我的控制台访问远程设备,例如 ssh root@192.168.7.2。 现在我想从我的 C 程序访问远程设备根目录下的文件。我试过FILE *ptr = popen("ssh root@192.168.170.155:/1.jpg", "r");。它不起作用。 访问文件以便我可以从 C 程序中读取文件的正确方法是什么?或者有什么更好的方法吗? 谢谢

【问题讨论】:

  • FILE *ptr = popen("ssh root@192.168.170.155 cat /1.jpg", "r");?

标签: c linux ubuntu ssh


【解决方案1】:

恐怕没有那么简单。 unix filepipe API 用于处理本地文件 - 即。可以由正在运行的操作系统实例访问的文件。为了读取远程机器上的文件——可以通过 ssh 访问,涉及的内容要多得多。通常 - 选择是

  1. 运行 NFS - 其中远程计算机是 NFS 服务器,您的计算机是 NFS 客户端,然后您可以在本地计算机上正常运行 openreadwrite
  2. 其他选项是以编程方式实现ssh 或其他协议的功能。参与程度稍高。所以该选项不可用。

根据您要对文件执行的操作,可能还有第三个选项 - 在您的 c 程序中的 system 函数中运行 scp,然后将文件复制到本地并执行您想要执行的任何操作文件。

这些是广泛的选择。如果您可以明确说出“您想对文件数据做什么”,那么可能还有其他选项可用。

【讨论】:

  • 弹出一个 ssh 工作正常。
  • 谢谢,是的,您的讨论非常有效。我可以知道如何从我的 C 程序运行 scp 命令吗?谢谢。我将研究 NFS 方法。我喜欢从远程设备读取 jpg 文件进行处理。
  • @AhmedMasud:对我来说,它不起作用,有什么问题吗?我的意思是它不起作用是即使文件不存在,我用 if(ptr != NULL) 检查 FILE,它总是正确的。假设远程设备没有 2.jpg,但我尝试读取 2.jpg 并且 if(ptr!=NULL) 始终为真。
  • 当然——你可以把它读成一个popen。在这里,你可以使用 'scp' 而不是 'ssh',但这会让你失去所有 stdout,我理解 @batuman 对读取文件感兴趣,而不是 stdoutscp 命令或 @987654332 @ 命令。更不用说其他复杂的情况了,比如必须输入密码。
  • man system。但这可能有点复杂 - 您可能必须将密码作为输入传递。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 2014-01-28
  • 2011-08-18
  • 1970-01-01
  • 2016-02-20
  • 2021-03-12
相关资源
最近更新 更多