【问题标题】:File exists, but open file still always returns -1文件存在,但打开的文件仍然总是返回 -1
【发布时间】:2015-02-01 07:55:52
【问题描述】:

文件“~/workspace/Test.txt”确实存在,但 fd 总是返回 -1。有人可以提示代码有什么问题吗?谢谢。

 int fd = open("~/workspace/Test.txt", O_RDONLY);
 cout << "fd is "<<fd<<endl;
 if (fd < 0) {
    cout << "did not find file"<<endl;
    return false;
 }

【问题讨论】:

    标签: c++


    【解决方案1】:

    (假设您的操作系统是类似 Linux 的 Posix)

    ~ 应该被扩展。通常外壳会扩展它。但是open 想要一个真实的文件路径。

    你可以试试:

    std::string fname (getenv("HOME"));
    fname += "/workspace/Test.txt";
    int fd = open(fname.c_str(), O_RDONLY);
    if (fd<0) {
       std::cerr << "failed to open " << fname 
                 << " : " << strerror(errno) << std::endl;
       return false;
    }   
    

    glob(7)wordexp(3)getenv(3)strerror(3)open(2)environ(7)

    阅读Advanced Linux Programming

    【讨论】:

    • 这并不意味着open()会依次这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2014-06-15
    • 2014-09-11
    • 1970-01-01
    相关资源
    最近更新 更多