获取用户和用户组信息

获取uid,gid和登录用户名

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h> /*包含相关函数的头文件*/
  4. #include <sys/types.h>
  5. int main(int argvLength, char *argv [])
  6. {
  7. uid_t uid; // 输出 uid 用户标识符
  8. gid_t gid; // 输出 gid 组标识符
  9. uid = getuid();
  10. gid = getgid();
  11. // char *getlogin(void) 输出当前登录用户名
  12. printf("username=%s \n", getlogin());
  13. printf("uid=%d,gid=%d\n", uid, gid);
  14. /*
  15. username=root
  16. uid=501,gid=20
  17. */
  18. return 0;
  19. }

获取所有用户账户信息

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pwd.h> /*包含相关函数的头文件*/
  4. #include <sys/types.h>
  5. // struct passwd
  6. // {
  7. // char *pw_name; // 用户账号
  8. // char *pw_passwd; // 用户密码
  9. // uid_t pw_uid; // 用户标识符
  10. // gid_t pw_gid; // 组标识符
  11. // char *pw_gecos; // 全名
  12. // char *pw_dir; // 主目录
  13. // char *pw_shell; // 所使用的Shell路径
  14. // };
  15. int main(int argvLength, char *argv[])
  16. {
  17. struct passwd *user;
  18. // struct passwd *getpwent(void); 用来返回用户信息,每一次读一项,直到读到NULL为止
  19. // 系统账户信息,一般存储在/etc/passwd中
  20. user = getpwent();
  21. int i = 0;
  22. while (user != NULL)
  23. {
  24. // printf("%s\n", user->pw_name);
  25. user = getpwent();
  26. i++;
  27. }
  28. printf("%d\n", i);
  29. // 使用了getpwent要记得关闭文件
  30. endpwent();
  31. return 0;
  32. }

获取指定用户信息

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pwd.h> /*包含相关函数的头文件*/
  4. #include <sys/types.h>
  5. // struct passwd
  6. // {
  7. // char *pw_name; // 用户账号
  8. // char *pw_passwd; // 用户密码
  9. // uid_t pw_uid; // 用户标识符
  10. // gid_t pw_gid; // 组标识符
  11. // char *pw_gecos; // 全名
  12. // char *pw_dir; // 主目录
  13. // char *pw_shell; // 所使用的Shell路径
  14. // };
  15. int main(int argvLength, char *argv[])
  16. {
  17. struct passwd *user;
  18. // struct passwd *getpwnam(const char *name);
  19. // 用来返回指定用户信息
  20. // 系统账户信息,一般存储在/etc/passwd中
  21. user = getpwnam("root");
  22. if (user != NULL) {
  23. printf("%s \n", user->pw_name); // root
  24. }
  25. return 0;
  26. }

获取当前登录用户信息

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <utmpx.h>
  4. // #include <utmp.h> /**警告:“utmp”已弃用[-Wdeprecated声明]*/
  5. // struct utmp {
  6. // short int ut_type; /**登录类型*/
  7. // pid_t ut_pid; /**登录进程的标识符*/
  8. // char ut_line[UT_LINESIZE]; /**登录设备名*/
  9. // char ut_id[4]; /**控制终端名*/
  10. // char ut_user[UT_NAMESIZE]; /**登录账号*/
  11. // char ut_host[UT_HOSTSIZE]; /**远程主机名*/
  12. // struct exit_status ut_exit; /**进程(HEAD_PROCESS)的结束状态*/
  13. // long int ut_session; /**会话标识符*/
  14. // struct timeval ut_tv; /**时间记录*/
  15. // int32_t ut_addr_v6[4]; /**登录主机IP地址*/
  16. // char __unused[20]; /**保留*/
  17. // }
  18. int main(int argc, char **argv) {
  19. struct utmpx *user;
  20. while ((user = getutxent()) != NULL)
  21. {
  22. if (user->ut_type == USER_PROCESS) {
  23. // 判断是否为普通用户进程
  24. printf("user=%s 登录设备名=%s\n", user->ut_user, user->ut_line);
  25. }
  26. }
  27. endutxent(); /*关闭文件*/
  28. return 0;
  29. }