1. ホーム
  2. c++

[解決済み] Linuxでホームディレクトリを取得する

2023-06-02 01:23:38

質問

Linuxで動作するC++プログラムで、ユーザのホームディレクトリを取得する方法が必要です。同じコードがUnix上で動作する場合、それは素晴らしいことです。私はHOME環境値を使用したくありません。

AFAIKでは、rootのホームディレクトリは/rootです。私のプログラムがrootユーザーで実行される場合、このディレクトリにいくつかのファイル/フォルダを作成してもよいのでしょうか?

どのように解決するのですか?

必要なものは getuid で現在のユーザのユーザIDを取得し、次に getpwuid でそのユーザのパスワードエントリ(ホームディレクトリを含む)を取得します。

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

struct passwd *pw = getpwuid(getuid());

const char *homedir = pw->pw_dir;

注意: もしスレッド化されたアプリケーションでこれが必要な場合は、このように getpwuid_r を使うことになるでしょう。