[리눅스 시스템 프로그래밍] 4.6 소유자 ID 및 소유 그룹 ID 변경할 때 chown, fchown

리눅스(유닉스) 시스템 호출 중에 chown과 fchown은 파일의 소유자 ID 및 소유 그릅 ID를 변경할 때 사용합니다.

#include <sys/types.h>

#include <unistd.h >

int chown(char *path, uid_t owner, gid_t group);

int fchown(int fd, uid_t owner, gid_t group);

반환 값: 실패 시 -1, 성공 시 0

만약 소유 그룹 ID만 변경할 때는 owner 인자를 -1을 전달하고 소유자 ID만 변경할 때는 group 인자를 -1 전달합니다.

다음은 명령줄 인자로 전달받은 이름의 파일을 생성한 후에 소유자 ID 및 소유 그룹 ID 를 확인하여 출력한 후에 chown 시스템 호출로 소유자 ID를 변경하고 다시 소유자 ID와 소유 그룹 ID를 확인하는 예제입니다.

/***********************************************************************
* ex_chown.c                                                           *
* example source - change file ownership                               *
***********************************************************************/
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int main(int argc,char **argv)
{
    if(argc != 2)
    {
        fprintf(stderr, "usage: %s [path]\n",argv[1]);
        return 0;
    }
    
    int fd = open(argv[1],O_RDWR|O_CREAT,0666);
    if(fd == -1)
    {
        perror("open error");
        return 0;
    }
    close(fd);
    struct stat sbuf;
    stat(argv[1],&sbuf);
    printf("UID:%u GID:%u\n",sbuf.st_uid, sbuf.st_gid);
    if(chown(argv[1],501,-1)<0)
    {
        perror("chown error");
        return 0;
    }
    stat(argv[1],&sbuf);
    printf("UID:%u GID:%u\n",sbuf.st_uid, sbuf.st_gid);

    return 0;    
}
[그림 4.8] chown으로 사용자 ID 변경 실행 화면
[그림 4.8] chown으로 사용자 ID 변경 실행 화면