getgrgid--批量获取当前进程的所有用户组

2258阅读 0评论2012-08-06 gliethttp
分类:C/C++

本代码来自:android/system/core/toolbox/id.c
运行在linux上的任何程序如果想查看自己所属的组,可以直接调用如下代码中的id_main(0, 0);

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>
  5. #include <pwd.h>
  6. #include <grp.h>

  7. static void print_uid(uid_t uid)
  8. {
  9.     struct passwd *pw = getpwuid(uid);

  10.     if (pw) {
  11.         printf("%d(%s)", uid, pw->pw_name);
  12.     } else {
  13.         printf("%d",uid);
  14.     }
  15. }

  16. static void print_gid(gid_t gid)
  17. {
  18.     struct group *gr = getgrgid(gid);
  19.     if (gr) {
  20.         printf("%d(%s)", gid, gr->gr_name);
  21.     } else {
  22.         printf("%d",gid);
  23.     }
  24. }

  25. int id_main(int argc, char **argv)
  26. {
  27.     gid_t list[64];
  28.     int n, max;

  29.     max = getgroups(64, list);
  30.     if (max < 0) max = 0;

  31.     printf("uid=");
  32.     print_uid(getuid());
  33.     printf(" gid=");
  34.     print_gid(getgid());
  35.     if (max) {
  36.         printf(" groups=");
  37.         print_gid(list[0]);
  38.         for(n = 1; n < max; n++) {
  39.             printf(",");
  40.             print_gid(list[n]);
  41.         }
  42.     }
  43.     printf("\n");
  44.     return 0;
  45. }

上一篇:性价比之王—— SC8810性能评测
下一篇:谷歌地图全面升级:更多高清图和45度航拍图