Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15529694
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: C/C++

2012-08-06 22:07:19

本代码来自: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. }

阅读(2220) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~