0 背景
在 linux 系统上开发时,有时需要判断当前用户名,来做针对性的功能设计,比如不同用户写的日志文件路径不同,因此,本文对获取用户名方法做一个介绍
1 数据结构说明
在 passwd 结构体中含有相关的定义
struct passwd {
char *pw_name; /*user name */
char *pw_passwd; /*user password */
uid_t pw_uid; /*user id */
gid_t pw_gid; /*group id */
char *pw_gecos; /*user real name */
char *pw_dir; /*home directory */
char *pw_shell; /*shell program */
};
该结构体的定义在 unistd.h 头文件中,可通过 getpwuid(uid_t uid) 函数获取,因此可使用下边的方法进行判断
2 用户名获取
#include <unistd.h>
#include <pwd.h>
#include <iostream>
int main()
{
struct passwd* pwd;
uid_t userid;
userid = getuid();
pwd = getpwuid(userid);
std::cout << "pw_name:" << pwd->pw_name << std::endl;
std::cout << "pw_passwd:" << pwd->pw_passwd << std::endl;
std::cout << "pw_uid:" << pwd->pw_uid << std::endl;
std::cout << "pw_gid:" << pwd->pw_gid << std::endl;
std::cout << "pw_gecos:" << pwd->pw_gecos << std::endl;
std::cout << "pw_dir:" << pwd->pw_dir << std::endl;
std::cout << "pw_shell:" << pwd->pw_shell << std::endl;
return 0;
}
输出如下
pw_name:amax
pw_passwd:x
pw_uid:1000
pw_gid:1000
pw_gecos:amax,,,
pw_dir:/home/amax
pw_shell:/bin/bash