首页 > 解决方案 > 在字符串中引用 Linux 用户名以打开文件

问题描述

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

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

其中 $USER 应该被翻译成 Linux 用户名。

这不起作用,因为字符串存储在我的配置文件中,我无法使用getenv().

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

标签: c++file-ioiostream

解决方案


您可以使用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

推荐阅读