C++を使ってLinuxファイルシステム上のファイルの所有者名とグループ名を取得する方法はありますか? stat()
コールは私に所有者IDとグループIDを与えますが、実際の名前は与えません。C++を使ってLinuxでファイルの所有者名を取得する方法は?
-rw-r--r--. 1 john devl 3052 Sep 6 18:10 blah.txt
プログラムで「john」と「devl」を取得するにはどうすればよいですか?
C++を使ってLinuxファイルシステム上のファイルの所有者名とグループ名を取得する方法はありますか? stat()
コールは私に所有者IDとグループIDを与えますが、実際の名前は与えません。C++を使ってLinuxでファイルの所有者名を取得する方法は?
-rw-r--r--. 1 john devl 3052 Sep 6 18:10 blah.txt
プログラムで「john」と「devl」を取得するにはどうすればよいですか?
getpwuid()
およびgetgrgid()
を使用してください。
#include <pwd.h>
#include <grp.h>
#include <sys/stat.h>
struct stat info;
stat(filename, &info); // Error check omitted
struct passwd *pw = getpwuid(info.st_uid);
struct group *gr = getgrgid(info.st_gid);
// If pw != 0, pw->pw_name contains the user name
// If gr != 0, gr->gr_name contains the group name
一つの方法は、文字列として、ユーザー名を取得するために、ファイルのUIDを取得するためにstat()
を使用し、getpwuid()
ことであろう。
* "getpwnam()とgetpwuid()はそれぞれ、指定されたログイン名またはユーザuidのパスワードデータベースを検索します**常に最初に見つかったものを返します**" *(emphasis added)複数のユーザー名に関連付けることができます(これは一般的に嫌われていると思います)。 – dmckee
フェアコメント。私の人生の悩みの1つは、ローカルグループファイルに、GID 1234の名前が異なる複数のエントリがあることです。これは、ユーザ 'jdoe'が実際にグループ1234のメンバであるかどうかを調べるために' getgrent() 'を意味する傾向があります。 –