리눅스 id 로 얻어오는것 질문 드립니다 ;

joon821의 이미지

id와 같은 기능을 하는 프로그램을 작성하시오.
getuid
getpwuid
getgid
getgrgid
getgrent

이런것들중에 사용을 해서 id 와 같은 기능을 하는 프로그램을 작성하는건데 도와 주세요

LIM Daeho의 이미지

man getuid 등을 실행해보면 함수원형을 비롯해서 원하시는 대부분의 정보가 나올 겁니다.
대충 다음과 같이 하면 거의 id 명령과 비슷한 결과가 나올 겁니다.

#include <stdio.h>
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
#include <sys/types.h>
#include <string.h>
 
int main ()
{
  struct passwd *pw = getpwuid(getuid());
  struct group *grp = getgrgid(getgid());
  struct group *grent;
  char **members;
  printf("uid=%d(%s) gid=%d(%s)",
                                  pw->pw_uid,
                                  pw->pw_name,
                                  grp->gr_gid,
                                  grp->gr_name);
 
  printf(" groups=%d(%s)", grp->gr_gid, grp->gr_name);
  while (NULL != (grent = getgrent()))
  {
    members = grent->gr_mem;
    while (*members)
    {
      if (0 == strcmp(*members, pw->pw_name))
      {
        printf(",%d(%s)", grent->gr_gid, grent->gr_name);
        break;
      }
      members++;
    }
  }
  printf("\n");
  return 0;
}