c++ - 在字符串中引用 Linux 用户名以打开文件
问题描述
我有一个配置文件,其中包含需要打开的另一个文件的路径。此文件路径引用 Linux 用户名:
/root/${USER}/workspace/myfile.txt
其中 $USER 应该被翻译成 Linux 用户名。
这不起作用,因为字符串存储在我的配置文件中,我无法使用getenv()
.
还有另一种方法可以实现这一目标吗?
解决方案
您可以使用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
推荐阅读
- django - 超级用户帐户到 django 中的仪表板
- flutter - Flutter:应该只有一项具有 [DropdownButton] 的值
- typescript - 为什么 TS 在 console.log(add(b)) 处显示错误?
- excel - Excel 文件在使用后仍处于锁定状态以供编辑
- linux - Dockerfile 将 RUN 命令结果作为 COPY 的目标传递
- python - 如何在 Tableau 中查找重复的值
- docker - 仅在 docker 容器中使用 cmd 打开和编辑文件
- node.js - 当我单击 github 中的合并请求按钮时,是否会执行合并前提交挂钩?
- .htaccess - Nginx 等效于 Apache 查询字符串规则
- hive - Hive 分区列