getpwnam() 함수는 로컬에 있는 패스워드(:12) 데이터베이스(:12)로 부터 파일들을 읽어들여서, 각 레코드를 가리키는 포인터를 리턴한다. /etc/passwd, NIS(:12), LDAP(:12) 등이 getpwnam함수가 사용하는 패스워드 데이터베이스이다. 인자로 사용자 이름을 넣으면, 해당 이름에 대한 패스워드 정보가 리턴된다.
getpwuid()함수는 패스워드 데이터베이스 레코드로 부터, UID(:12)를 리턴한다.
데이터는 passwd 구조체에 저장되어서 리턴된다. passwd 구조체는 <pwd.h> 에 정의되어 있다.
struct passwd {
char *pw_name; /* user name */
char *pw_passwd; /* user password */
uid_t pw_uid; /* user ID */
gid_t pw_gid; /* group ID */
char *pw_gecos; /* real name */
char *pw_dir; /* home directory */
char *pw_shell; /* shell program */
};
리턴 값
getpwnam()과 getpwuid() 함수는 passwd 구조체를 리턴한다. 만약 이자로 주어지는 유저이름인 name에 대한 레코드가 없거나, 다른 원인으로 에러가 발생했다면, NULL을 리턴한다. 에러의 원인은 errno(:12)로 확인할 수 있다.
에러
다음과 같은 에러가 정의되어 있다.
EINTR
signal(:12)를 받아서 중단되었다.
EIO
I/O 에러
EMFILE
프로세스(:12)가 열수 있는 파일의 갯수를 초과해서, 더 이상 파일을 열수 없다.
ENFILE
시스템이 열수 있는 파일의 갯수를 초과해서, 더 이상 파일을 열 수 없다.
ENOMEM
passwd 구조체를 위해 할당할만한 메모리 공간이 남아있지 않다.
ERAGNE
잘못된 버퍼공간을 사용하고 있다.
사용하는 파일
/etc/passwd
로컬 패스워드 데이터베이스 파일
예제
#include <sys/types.h>
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
#include <sys/types.h>
int main()
{
struct passwd *u_info;
struct group *g_info;
// yundream의 uid와 post의 gid를 얻어서
// my.txt의 파일 권한을 변경한다.
u_info = getpwnam("yundream");
g_info = getgrnam("post");
chown("/home/test/my.txt", u_info->pw_uid, g_info->gr_gid);
}
사용법
설명
리턴 값
에러
사용하는 파일
예제
참고
Recent Posts
Archive Posts
Tags