getgrnam_r(3)

#include <sys/types.h>
#include <grp.h>

int getgrnam_r(const char *name, struct group *grp, char *buf, size_t buflen, struct group **result);

group name으로 사용자 그룹의 상세정보를 조회하는 함수입니다. 이 함수는 multi-thread 프로그램에서도 안전한 thread-safe한 함수입니다. group의 정보는 /etc/group 파일에 저장되며, 파일의 format은 아래와 같습니다.

grp1:x:3000:usr1,usr2,usr3

grp1 : group명
x : group 비밀번호, x인 경우는 비밀번호 미설정
3000 : grp1에 대한 group id
usr1,usr2,usr3 : 그룹에 포함된 user 목록

 

파라미터

name
    - 그룹의 상세 정보를 얻기 위한 그룹명
grp
    - 검색한 그룹 정보를 저장할 buffer
buf
    - 그룹명(문자열)을 저장함
buflen
    - buf의 크기
result
    - 정상적으로 조회되었다면, result는 grp와 같습니다.
    - NULL이면, 조회를 하지 못하였거나, 오류가 발생하였습니다.
    - 오류가 발생하였다면 return값이 0이 아닙니다.

 

RETURN

0 
    - 정상적으로 그룹정보를 조회하였습니다.

양수
    - 오류가 발생하였으며, errno값이 return 됩니다.
    

 


활용 예제

 

Sample) group명을 입력받아 group id를 조회합니다.

#include <sys/types.h>
#include <grp.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>

int main(int argc, char *argv[])
{
    struct group   grp;
    struct group  *result;
    char   buf[1024];
    int    ret;

    ret = getgrnam_r(argv[1], &grp, buf, sizeof(buf), &result);
    if (result == NULL) {
        if (ret == 0)
            printf("%s\n", buf);
        else {
            printf("getgrnam_r() error: %s\n", strerror(ret));
        }
        return 1;
    }

    printf("Group Name: %s; GID: %d\n", grp.gr_name, grp.gr_gid);

    return 0;
}

 


see also : getegid(2)  getgrnam(3)  getgrgid(3)  getgrnam_r(3) getgrgid_r(3) 사용자 및 그룹 관련 Library

 

 

블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요