ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C/C++ umask(2)
    C,C++ & Linux 2020. 5. 17. 20:24
    728x90

    umask(2) 함수 기능

    파일 생성 시 기본 권한을 제한하는 마스크를 일시적으로 변경합니다.

    변경된 마스크 값은 프로세스가 종료되면 원래대로 돌아갑니다.

     

    운영체제마다 기본적으로 설정된 umask 값이 있습니다.

    만약 제 pc의 umask 값이 0123 이라고 한다면 (맨 앞의 0은 8진수를 의미합니다.)

    파일 생성 시 0777 - 0123 = 0654

    0654 의 권한을 가진 파일이 만들어집니다.

    함수 원형

    #include <sys/types.h>
    #include <sys/stat.h>
    
    mode_t umask(mode_t mode);

    매개변수

    mode

    원하는 umask 값

     

    테스트 매크로 8진수 내용
    S_IRWXU 0000700 소유자 권한 마스크
      S_IRUSR 0000400 소유자 읽기 권한
      S_IWUSR 0000200 소유자 쓰기 권한
      S_IXUSR 0000100 소유자 실행 권한
    S_IRWXG 0000070 그룹 권한 마스크
      S_IRGRP 0000040 그룹 읽기 권한
      S_IWGRP 0000020 그룹 쓰기 권한
      S_IXGRP 0000010 그룹 실행 권한
    S_IRWXO 0000007 기타 사용자 권한 마스크
      S_IROTH 0000004 기타 사용자 읽기 권한
      S_IWOTH 0000002 기타 사용자 쓰기 권한
      S_IXOTH 0000001 기타 사용자 실행 권한

    반환값

    변경되기 전의 umask 값

    예제

    #include <stdio.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    
    #define RW_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
    
    int main(int argc, char *argv[]) {
        char *fname1 = "ssu_file1";
        char *fname2 = "ssu_file2";
    
        // umask 를 아예 설정하지않음
        // 따라서 모든 RW_MODE 온전한 권한을 가진 파일 ssu_file1이 생성됨
        umask(0);
        creat(fname1, RW_MODE);
    
        // umask 를 0066 으로 설정함
        // 따라서 RW_MODE(0666) - 0066 = 0600 권한을 가진 파일 ssu_file2가 생성됨
        umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
        creat(fname2, RW_MODE);
        exit(0);
    }
    

    결과

     

     

     

     

     

     

     

     

     

     

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

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

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

    C/C++ chown(2) fchown(2) lchown(2)  (0) 2020.05.18
    C/C++ chmod(2), fchmod(2)  (0) 2020.05.17
    C/C++ access(2)  (1) 2020.05.17
    C/C++ stat(2), lstat(2), fstat(2)  (0) 2020.05.17
    C/C++ sync(2), fsync(2), fdatasync(2)  (0) 2020.05.16

    댓글

Designed by Tistory.