我正在编写小型 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/