passwd结构体
struct passwd {
char *pw_name; /* 用户名 */
char *pw_passwd; /* 加密后的密码 */
uid_t pw_uid; /* 用户ID */
gid_t pw_gid; /* 组ID */
char *pw_gecos; /* 用户全名或注释字段 */
char *pw_dir; /* 用户主目录 */
char *pw_shell; /* 用户登录后使用的shell */
};
修改用户描述
#usermod -c "this is user" testpwd
#cat /etc/passwd|grep testpwd
testpwd:x:1001:1001:this is user:/home/testpwd:/bin/sh
getpwent、getpwnam和getpwuid函数
函数名 |
入参 |
解释 |
getpwent |
无入参 |
读取Passwd文件中的某一行 |
getpwnam |
const char *name |
读取指定用户名的用户信息 |
getpwuid |
uid_t uid |
读取指定用户id的用户信息 |
#include <stdio.h>
#include <pwd.h>
#include <unistd.h> // 用于获取当前用户ID
void test_getpwent()
{
struct passwd *pw;
setpwent(); // 重置passwd文件的读取位置到开始
while ((pw = getpwent()) != NULL) { // 遍历passwd文件中的所有用户
printf("Username: %s\n", pw->pw_name);
printf("User ID: %d\n", pw->pw_uid);
printf("Group ID: %d\n", pw->pw_gid);
printf("Commit : %s\n", pw->pw_gecos);
printf("Home Directory: %s\n", pw->pw_dir);
printf("Shell: %s\n", pw->pw_shell);
printf("\n");
}
endpwent(); // 关闭passwd文件
}
void test_getpwnam()
{
struct passwd *pw;
pw = getpwnam("username"); // 将"username"替换为你要查询的用户名
if (pw != NULL) {
printf("Username: %s\n", pw->pw_name);
printf("User ID: %d\n", pw->pw_uid);
printf("User gecos: %s\n", pw->pw_gecos);
// ... 可以打印其他字段
} else {
printf("User not found.\n");
}
}
void test_getpwuid(int target_uid)
{
struct passwd *pw;
uid_t uid = getuid(); // 获取当前用户的ID
pw = getpwuid(target_uid); //获取指定uid的用户信息
if (pw != NULL) {
printf("Username: %s\n", pw->pw_name);
printf("User ID: %d\n", pw->pw_uid);
printf("User gecos: %s\n", pw->pw_gecos);
// ... 可以打印其他字段
} else {
printf("User not found.\n");
}
}
int main() {
test_getpwuid(1001);// 打印uid为1001的用户的信息
return 0;
}