리눅스(유닉스) 시스템 호출 중에 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; }