获取用户和用户组信息
获取uid,gid和登录用户名
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> /*包含相关函数的头文件*/
#include <sys/types.h>
int main(int argvLength, char *argv [])
{
uid_t uid; // 输出 uid 用户标识符
gid_t gid; // 输出 gid 组标识符
uid = getuid();
gid = getgid();
// char *getlogin(void) 输出当前登录用户名
printf("username=%s \n", getlogin());
printf("uid=%d,gid=%d\n", uid, gid);
/*
username=root
uid=501,gid=20
*/
return 0;
}
获取所有用户账户信息
#include <stdio.h>
#include <stdlib.h>
#include <pwd.h> /*包含相关函数的头文件*/
#include <sys/types.h>
// struct passwd
// {
// char *pw_name; // 用户账号
// char *pw_passwd; // 用户密码
// uid_t pw_uid; // 用户标识符
// gid_t pw_gid; // 组标识符
// char *pw_gecos; // 全名
// char *pw_dir; // 主目录
// char *pw_shell; // 所使用的Shell路径
// };
int main(int argvLength, char *argv[])
{
struct passwd *user;
// struct passwd *getpwent(void); 用来返回用户信息,每一次读一项,直到读到NULL为止
// 系统账户信息,一般存储在/etc/passwd中
user = getpwent();
int i = 0;
while (user != NULL)
{
// printf("%s\n", user->pw_name);
user = getpwent();
i++;
}
printf("%d\n", i);
// 使用了getpwent要记得关闭文件
endpwent();
return 0;
}
获取指定用户信息
#include <stdio.h>
#include <stdlib.h>
#include <pwd.h> /*包含相关函数的头文件*/
#include <sys/types.h>
// struct passwd
// {
// char *pw_name; // 用户账号
// char *pw_passwd; // 用户密码
// uid_t pw_uid; // 用户标识符
// gid_t pw_gid; // 组标识符
// char *pw_gecos; // 全名
// char *pw_dir; // 主目录
// char *pw_shell; // 所使用的Shell路径
// };
int main(int argvLength, char *argv[])
{
struct passwd *user;
// struct passwd *getpwnam(const char *name);
// 用来返回指定用户信息
// 系统账户信息,一般存储在/etc/passwd中
user = getpwnam("root");
if (user != NULL) {
printf("%s \n", user->pw_name); // root
}
return 0;
}
获取当前登录用户信息
#include <stdio.h>
#include <stdlib.h>
#include <utmpx.h>
// #include <utmp.h> /**警告:“utmp”已弃用[-Wdeprecated声明]*/
// struct utmp {
// short int ut_type; /**登录类型*/
// pid_t ut_pid; /**登录进程的标识符*/
// char ut_line[UT_LINESIZE]; /**登录设备名*/
// char ut_id[4]; /**控制终端名*/
// char ut_user[UT_NAMESIZE]; /**登录账号*/
// char ut_host[UT_HOSTSIZE]; /**远程主机名*/
// struct exit_status ut_exit; /**进程(HEAD_PROCESS)的结束状态*/
// long int ut_session; /**会话标识符*/
// struct timeval ut_tv; /**时间记录*/
// int32_t ut_addr_v6[4]; /**登录主机IP地址*/
// char __unused[20]; /**保留*/
// }
int main(int argc, char **argv) {
struct utmpx *user;
while ((user = getutxent()) != NULL)
{
if (user->ut_type == USER_PROCESS) {
// 判断是否为普通用户进程
printf("user=%s 登录设备名=%s\n", user->ut_user, user->ut_line);
}
}
endutxent(); /*关闭文件*/
return 0;
}