ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C/C++ chown(2) fchown(2) lchown(2)
    C,C++ & Linux 2020. 5. 18. 14:19
    728x90

    chown 함수 기능

    파일의 소유자를 변경하는 함수입니다.

    파일에 대한 적절한 권한이 있는 프로세스만이 위 함수를 호출 할 수 있습니다.

     

    chown 과 fchown 은 심볼릭 링크 파일에 적용하면 링크 파일이 가리키는 파일에 대한 소유자를 변경합니다.

    심볼릭 링크 파일 자체의 소유자를 변경하고 싶다면 lchown() 을 사용해야 합니다.

    함수 원형

    #include <unistd.h>
    #include <sys/types.h>
    
    int chown(const char *filepath, uid_t owner, gid_t group);
    int fchown(int fd, uid_t owner, gid_t group);
    int lchown(const char *filepath, uid_t owner, gid_t group);

    매개변수

    filepath

    소유자를 변경할 대상 파일의 경로

     

    fd

    소유자를 변경할 대상 파일의 파일 디스크립터

     

    owner

    파일의 새 소유자

     

    group

    파일의 새 그룹

    반환값

    성공 시 0

    에러 시 -1 리턴하고 errno 설정

    예제

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    
    int main(int argc, char *argv[]) {
        struct stat statbuf;
        char *fname = "ssu_myfile";
        int fd;
    
    	// 파일 생성
        fd = open(fname, O_RDWR | O_CREAT, 0600);
        close(fd);
    	
    	// 파일 소유자 체크
        stat(fname, &statbuf);
        printf("# 1st stat call # UID: %d    GID: %d\n", statbuf.st_uid, statbuf.st_gid);
    
    	// 소유자 변경
        if (chown(fname, 501, 20) < 0) {
            fprintf(stderr, "%s chown error 발생\n", fname);
            exit(1);
        }
    
        stat(fname, &statbuf);
        printf("# 2nd stat call # UID: %d    GID: %d\n", statbuf.st_uid, statbuf.st_gid);
    
    	// 파일 삭제
        if (unlink(fname) < 0) {
            fprintf(stderr, "%s unlink error\n", fname);
            exit(1);
        }
        exit(0);
    }
    

    결과

     

     

     

     

     

     

     

     

     

     

    리눅스시스템프로그래밍 저자 : 홍지만
    https://book.naver.com/bookdb/book_detail.nhn?bid=14623672

    책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)

    'C,C++ & Linux' 카테고리의 다른 글

    하드링크, 심볼릭링크  (0) 2020.05.18
    C/C++ truncate(2) ftruncate(2)  (0) 2020.05.18
    C/C++ chmod(2), fchmod(2)  (0) 2020.05.17
    C/C++ umask(2)  (1) 2020.05.17
    C/C++ access(2)  (1) 2020.05.17

    댓글

Designed by Tistory.