GETGRENT(3)

명칭
getgrent, getgrnam, getgrgid, setgroupent, setgrent, endgrent - 그룹 데이타베이스의 조작

서식
#include <sys/types.h> #include <grp.h> struct group * getgrent(void) struct group * getgrnam(const char *name) struct group * getgrgid(gid_t gid) int setgroupent(int stayopen) int setgrent(void) void endgrent(void)

해설
이러한 함수는 모두, group(5) 에 기술된 그룹 데이타베이스 파일 /etc/group (을)를 조작합니다. 데이타베이스의 각 행은, 인클루드 파일 <grp.h> 에 있는 구조체 group 에 의해 정의됩니다. 다음과 같습니다.

    struct group {
    	char	*gr_name;	/* 그룹명 */
    	char	*gr_passwd;	/* 그룹 패스워드 */
    	int	gr_gid;		/* 그룹 id */
    	char	**gr_mem;	/* 그룹 멤버 */
    };

함수 getgrnam() 및 getgrgid() (은)는, name 에 나타내는 주어진 그룹명 또는 gid 에 나타내는 그룹 id 를, 그룹 데이타베이스로 검색해, 각각 최초의 적합 엔트리를 돌려줍니다. 다른 엔트리에 동일 그룹명 또는, 동일 그룹 id 하지만 주어지고 있으면(자), 미정도리인 불측의 거동을 가져오는 일이 있습니다.

getgrent() 함수는, 그룹 데이타베이스를 차례차례 읽어들입니다. 완전한 그룹 리스트를 착실하게 생성하는 프로그램 방향입니다.

3 개의 routine는 모두, 읽기에 필요하면 목적의 그룹 파일을 오픈합니다.

setgroupent() 함수는 목적의 파일을 오픈, 또는 벌써 오픈되고 있다 경우는 되감기 합니다. stayopen 하지만 0 이 아니면, 파일 기술자는 오픈 대로 되어 이후의 함수 호출이 극히 고속화됩니다. 다만 getgrent() 의 경우는, 디폴트로 파일 기술자를 클로우즈 하지 않기 때문에, 이 기능은 불필요합니다. 또, 그룹 파일이 갱신될 가능성이 있으므로, 장기간 실행하는 프로그램으로 이 기능을 사용하는 것은 위험합니다. 주의해 주세요.

setgrent() 함수는, 0 의 인수를 가진다 setgroupent() (와)과 같습니다.

endgrent() 함수는, 오픈되고 있는 파일을 클로우즈 합니다.

YP/NIS 의 상호작용
yp(4) 그룹 데이타베이스가 사용 가능한 경우, 요구된 그룹이 로컬의 /etc/groupfile 에 발견되지 않으면 getgrnam() 및 getgrgid() 함수는, YP MAP “group.byname” 및 “group.bygid” (을)를 각각 사용합니다. group(5) 그리고 기술되었던 대로 전체 MAP가 사용 가능하면, getgrent() 함수는 YP MAP “group.byname” (을)를 대로.

반환값
함수 getgrent(), getgrnam(), getgrgid() (은)는, 모두 성공하면(자) 그룹 엔트리의 포인터를 돌려줍니다. 엔드 오브 파일에 도달할까 에러 하지만 발생했을 경우는, 누르포인타가 돌아갑니다. 함수 setgroupent() 및 setgrent() (은)는, 처리가 무사하게 완료했을 경우는 값 1 을 돌려줍니다. 그 외의 경우는 값 0 이 돌아갑니다. 함수 endgrent() 및 setgrfile() 의 반환값은 없습니다.

관련 파일
/etc/group
    그룹 데이타베이스 파일

관련 항목
getpwent(3), yp(4), group(5)

역사
함수 endgrent(), getgrent(), getgrnam(), getgrgid(), setgrent() (은)는, AT&T UNIX 그리고 최초로 받아들여졌습니다. 함수 setgrfile() 및 setgroupent() (은)는, 4.3BSD Reno 그리고 최초로 받아들여졌습니다.

호환성
대체 패스워드 데이타베이스의 표준을 허락한 역사적인 함수 setgrfile() (은)는, 지금까지 비난 되어 왔습니다만, 이미 사용할 수 없습니다.

버그
함수 getgrent(), getgrnam(), getgrgid(), setgroupent(), setgrent() (은)는, 각각의 결과를 내부의 정적 오브젝트에 남겨, 그 오브젝트의 포인터를 돌려줍니다. 후에 계속되는 같은 함수의 호출은, 그 같은 오브젝트를 개변합니다.