2011-09-07 11 views
9

C++を使ってLinuxファイルシステム上のファイルの所有者名とグループ名を取得する方法はありますか? stat()コールは私に所有者IDとグループIDを与えますが、実際の名前は与えません。C++を使ってLinuxでファイルの所有者名を取得する方法は?

-rw-r--r--. 1 john devl 3052 Sep 6 18:10 blah.txt 

プログラムで「john」と「devl」を取得するにはどうすればよいですか?

答えて

22

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 
+3

* "getpwnam()とgetpwuid()はそれぞれ、指定されたログイン名またはユーザuidのパスワードデータベースを検索します**常に最初に見つかったものを返します**" *(emphasis added)複数のユーザー名に関連付けることができます(これは一般的に嫌われていると思います)。 – dmckee

+0

フェアコメント。私の人生の悩みの1つは、ローカルグループファイルに、GID 1234の名前が異なる複数のエントリがあることです。これは、ユーザ 'jdoe'が実際にグループ1234のメンバであるかどうかを調べるために' getgrent() 'を意味する傾向があります。 –

3

一つの方法は、文字列として、ユーザー名を取得するために、ファイルのUIDを取得するためにstat()を使用し、getpwuid()ことであろう。

関連する問題