Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

chown(2)

1장. chown(2)

차례
1.1. 사용법
1.2. 설명
1.3. 반환값
1.4. 에러
1.5. 예제

파일에 대한 소유권을 바꾸기 위해서 사용된다. 유사한 류의 함수로 fchown(2), lchown(2) 함수들이 있다


1.1. 사용법

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

int chown(const char *path, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gid_t group);
		


1.2. 설명

chown(2) 계열의 함수들은 path에 지정되어있는 파일 혹은 fd(파일지정자)가 가르키는 파일의 소유(및 그룹)권한을 변경하기 위해 사용된다. chown(2)을 이용해서 파일의 권한을 변경하기 위해서는 해당 파일에 대한 권한을 가지고 있어야 한다. 슈퍼유저는 임의로 권한의 변경이 가능하다.

lchown(2)은 심볼링 링크(sybolic links)에 대한 소유 권한을 변경 하기 위한 목적으로 과거(2.1.x)에 사용되었었다. 그러나 최근의 커널들은 심볼릭 링크에 대한 권한 변경을 허용하지 않는다. lchown(2)역시 내부적으로 chown(2)와 동일한 시스템 콜을 사용한다.


1.3. 반환값

성공할경우 0을 실패했을경우에는 -1을 반환하며, 적당한 errno 값을 설정한다.


1.4. 에러

EPERM

유효 UID가 파일의 소유자와 일치하지 않으며 0이 아닐 경우, 혹은 소유자나 그룹이 정확히 지정되지 않았을 경우

EROFS

소유권을 변경하고자 하는 파일이 읽기전용 파일시스템에 있을 경우로 cd-rom 혹은 읽기 전용의 samba, NFS 파일 시스템 등에서 발생할 수 있다.

ENOENT

파일이 존재하지 않는다.

ENOMEM

커널 메모리가 충분하지 않을 때

EACCESS

파일을 찾기 위한 디렉토리 권한이 거부되었을 때


1.5. 예제

/home/test/my.txt 파일의 유저권한을 yundream 그룹권한을 post 로 변경하기 원할때

#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;

    u_info = getpwnam("yundream");
    g_info = getgrnam("post");

    chown("/home/test/my.txt", u_info->pw_uid, g_info->gr_gid);
}
		
getpwnam(3) 과 getgrnam(3) 은 각각 유저의 정보와 그룹의 정보를 이름으로 가져오기 위해서 사용하는 함수이다. getpwnam 은 /etc/passwd 파일을, getgrnam 은 /etc/group 파일을 참조하여서 각각의 정보를 가져온다.