我正在编写小型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";
...
}
这样,正如你所看到的,我向用户询问他的用户名,并将其附加到位置字符串,有没有简单的方法来查找用户的主目录而不需要用户的输入?我试过&#34;〜/...&#34;它没有用。
我知道我可以扫描&#34; / etc / passwd&#34;文件从那里找到它,但我想知道是否有另一种方式。
答案 0 :(得分:4)
这里最好的选择可能是使用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;
}
答案 1 :(得分:1)
如果您想转到主目录,请使用chdir("~")
否则,
这是一个肮脏的黑客,但它的工作原理
#include <unistd.h>
char currdir[100];
char homedir[100];
getcwd(currdir); //store the current directory in currdir
chdir("~"); // change the working directory to user's home directory
getcwd(homedir); // get the full address
chdir(currdir); // go back to the previous directory