【问题标题】:Using C++ to read a file on a remote Linux-type server使用 C++ 读取远程 Linux 类型服务器上的文件
【发布时间】:2021-06-27 13:35:14
【问题描述】:

我正在使用 Raspian 和 samba 文件共享构建一个小型 Raspberry Pi 网络。我希望每个人都能够向其他人读/写小文本文件,以提供一种非常简单的流程协调方法。我正在使用带有单个共享文件的 Pi 测试该方法,并且可以使用其桌面文件管理器从 Ubuntu 笔记本电脑读取/写入它。我正在尝试以编程方式做同样的事情:

#include<string>
#include<iostream>
#include<fstream>
using namespace std;

void read_file () {
    string line;
    
    ifstream myfile;
    myfile.open("\\\\192.168.1.78\\home\\pi\\new2.txt");
    if (myfile.is_open()){
        cout << "file is open" << endl;
            getline(myfile, line);
            cout<< line << endl;
    } else {
        perror("Error");
    }   
    myfile.close();
}

int main(){
    read_file();
}

错误消息是“没有这样的文件或目录”。我猜这要么是我没见过的权限问题(远程文件共享为 777),要么是我引用服务器和文件夹的方式。我尝试了很多组合都无济于事。

有什么建议吗?

【问题讨论】:

  • 假设您计划使用 ssh 进行连接,您需要与 ssh 库进行交互。默认情况下,C++ 在其fstream 库中不支持网络,如果您的实现(通过某种奇怪的机会)碰巧支持它,那么它将非常不可移植。
  • 感谢您的反馈 - 我看到了许多使用网络路径名称对“fstream”的引用,尽管它们都使用 Windows,我不能确定它们中的任何一个是否真的有效,我猜它要么是 ssh 或套接字,要么是像 mosquitto 这样的开箱即用的东西。

标签: c++11 server samba smb


【解决方案1】:

像这样使用反斜杠路径在 Ubuntu 系统上是行不通的。这在您的文件管理器中起作用的事实可能是由于文件管理器很聪明并且为您透明地处理安装和路径转换。

您需要做的是自己挂载共享文件夹,这样您就可以使用常规的 Linux 文件路径来打开它。有关如何使用 Samba 挂载 SMB 共享的问题,请参阅此问题:https://unix.stackexchange.com/questions/99065/how-to-mount-a-windows-samba-windows-share-under-linux

【讨论】:

  • 感谢您的链接 - 我密切关注示例,但远程目录仍然无法挂载。我还偶尔收到来自 Ubuntu 的崩溃报告和核心转储。我不会深入研究可能的原因,而是放弃 Ubuntu 并使用 Raspbian Pi 进行尝试 - 更接近我实际构建的内容,并转储反斜杠,我认为这是古代 Windows 系统的遗留物。
  • 很遗憾听到这个消息。如果它在 RPi 上也失败了,我建议在超级用户/unix 上打开一个关于你得到的错误的单独问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 2023-03-05
  • 1970-01-01
  • 2021-02-23
  • 2014-12-04
  • 1970-01-01
相关资源
最近更新 更多