c++ - 使用 fstream 访问 linux 用户主目录

标签 c++ linux

我正在编写小型 C++ 代码来访问和编辑用户主目录中的某些文本文件。目前我有以下代码(这是相关部分):

bool core(void) {
    std::string autostart_entry = "";
    std::string user_entry = "";
    std::fstream username;
    username.open("username.txt", std::fstream::in);
    std::string location;
    std::string user_name;
    if (username.fail()) {
        username.open("username.txt", std::fstream::out);
        std::cout << "What's your system username? ";
        std::getline(std::cin, user_name);
        username << user_name;
    }
    else
        username >> user_name;
    username.close();
    location = "/home/" + user_name + "/.config/openbox/autostart";
    ...
}

这样,如您所见,我要求用户提供他的用户名,并将其附加到位置字符串,是否有任何简单的方法可以在不要求用户输入的情况下找到用户的主目录?我试过 "~/..."但它不起作用。

我知道我可以扫描“/etc/passwd”文件从那里找到它,但我想知道是否还有其他方法。

最佳答案

这里最好的选择可能是使用 getenv 函数:

#include <stdlib.h>

const char* homeDir = getenv("HOME");

$HOME 环境变量通常总是在 linux 下设置,它会返回一个字符串到用户主目录(即使它不在/home 下)

编辑:这仅适用于运行该程序的用户的主目录。如果你想要不同用户的主目录,你将需要使用另一种方法

EDIT2:实际上,考虑这个问题超过 1 秒……上面的方法可行,您应该先使用它。但是,如果未设置 HOME,则可以使用 getpwuid:

#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>

const char *homedir = getenv("HOME");
if ( homedir == NULL ) {
    homedir = getpwuid(getuid())->pw_dir;
}

关于c++ - 使用 fstream 访问 linux 用户主目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35570698/

相关文章:

c++ - 所有整数值都完美地表示为 double 吗?

c++ - 不要用 "two-stage name lookup"得到它

linux - 将两列数据格式化为三列数据

c - "Undefined reference to main"与 main 在单独的脚本/规则中

c - read() from pipeline 保证在 EOF 之前提供所有原子写入的数据?

c++ - 如何使用 Boost::Python 包装 C++ OpenCV 代码?

c++ - 逗号作为变量初始化中的分隔符(不是作为运算符)

c++ - 基本 C++ 程序崩溃 VS 2008

linux - 如何从应用程序登录 AUDITD?

linux - 在 Linux 上使用 Expect 模块将屏幕输出捕获到文件