2011-09-07 37 views
9

Làm cách nào để lấy tên chủ sở hữu và tên nhóm của một tệp trên hệ thống tệp Linux bằng C++? Cuộc gọi stat() chỉ cung cấp cho tôi ID chủ sở hữu và ID nhóm nhưng không cung cấp tên thực.Làm cách nào để lấy tên chủ sở hữu của tệp trong Linux bằng C++?

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

Làm cách nào để nhận được 'john' và 'devl' theo cách lập trình?

Trả lời

22

Sử dụng 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

Để lưu ý đầy đủ rằng * "getpwnam() và getpwuid() tìm kiếm cơ sở dữ liệu mật khẩu cho tên đăng nhập hoặc người dùng uid tương ứng, ** luôn trả về câu hỏi đầu tiên **" * (nhấn mạnh được thêm) vì một UID có thể được liên kết với nhiều hơn một tên người dùng (nghĩ rằng điều này thường được tán thành). – dmckee

+0

Nhận xét công bằng. Một trong những nguyên nhân của cuộc đời tôi là tệp nhóm cục bộ có nhiều mục nhập cho GID 1234 với các tên khác nhau. Nó có nghĩa là 'getgrent()' để tìm xem liệu người dùng 'jdoe' có thực sự là thành viên của nhóm 1234 hay không. –

3

Một cách sẽ được sử dụng để có được stat() uid của một tập tin và sau đó getpwuid() để có được tên người dùng như là một chuỗi.

Các vấn đề liên quan