在字符串中引用Linux用户名以打开文件

时间:2018-09-10 10:36:41

标签: c++ file-io iostream

我有一个配置文件,其中包含另一个需要打开的文件的路径。此文件路径引用Linux用户名:

/root/${USER}/workspace/myfile.txt

其中$ USER应该转换为Linux用户名。

这不起作用,因为该字符串存储在我的配置文件中,所以我不能使用getenv()

还有另一种方法可以实现这一目标吗?

2 个答案:

答案 0 :(得分:2)

您可以使用wordexp来翻译“〜”,它是UNIX路径元素,表示HOME目录。像这样:

#include <wordexp.h>

std::string homedir()
{
    std::string s;
    wordexp_t p;
    if(!wordexp("~", &p, 0))
    {
        if(p.we_wordc && p.we_wordv[0])
            s = p.we_wordv[0];
        wordfree(&p);
    }
    return s;
}

然后从返回的路径中提取用户名。

但是我通常像这样使用std::getenv()

auto HOME = std::getenv("HOME"); // may return nullptr
auto USER = std::getenv("USER"); // may return nullptr

答案 1 :(得分:2)

使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="container" > <svg viewBox="0 0 700 700"> <image class="example" href="https://i.stack.imgur.com/eM5im.png" width="300px" height="450px" x="50", y="50"/> <image class="example" href="https://i.stack.imgur.com/eFoj1.jpg" width="300px" height="450px" x="350", y="0"/> </svg> </div>获取用户名,并用其替换路径中的getenv

一个非常简单的例子:

$USER