源代码中使用geteuid()获取当前有效用户id,再使用getpwuid()根据前面有效用户id来填充struct passwd结构体,打印出该结构体中的pw_name变量。
源代码如下:
uid = geteuid (); //返回用户的有效id
pw = (uid == NO_UID && errno ? NULL : getpwuid (uid)); //根据传入的用户ID返回指向passwd的结构体
if (!pw)
error (EXIT_FAILURE, errno, _("cannot find name for user ID %lu"),(unsigned long int) uid);
puts (pw->pw_name);
struct passwd定义在pwd.h文件中,如下:
/* The passwd structure. */
struct passwd
{
char *pw_name; /* Username. */
char *pw_passwd; /* Password. */
__uid_t pw_uid; /* User ID. */ //用户id,即有效id
__gid_t pw_gid; /* Group ID. */
char *pw_gecos; /* Real name. */ //真实用户名
char *pw_dir; /* Home directory. */
char *pw_shell; /* Shell program. */
};
这7个成员变量分别对应/etc/passwd文件中的7列,如下图:
除了使用getpwuid来填充struct passwd结构体,还可以使用getpwnam来填充,参数是用户名,就是passwd文件中的第一列的值。