CS/UNIX
[Files And Directories] - umask
sliver__
2022. 10. 11. 21:19
728x90
[Permission bits]
- 새로운 파일 또는 디렉토리를 생성할 때 권한을 부여한다.
- umask 함수를 사용하며 자료형은 mode_t 이다.
rwx rwx rwx
- rwx 의미는 아래와 같다.
- 각 3개의 자리 묶음은 아래와 같다.
- 0740의 권한은 아래와 같다.
- C macro는 아래와 같다.
[umask 범위 이해]
- umask 값은 프로세스 수준에서 UNIX 커널에 의해 유지된다.
- Korn 쉘에 대한 umask 내장 명령은 해당 쉘 프로세스에 대한 umask 값을 설정한다.
- 그러나 쉘이 새 프로세스를 생성할 때마다 새 프로세스는 쉘의 umask 설정을 상속한다.
- 이러한 방식으로 셸에서 umask 값을 설정하면 새 셸 프로세스에서도 전체 사용자 세션에 대해 설정된다.
- umask 값의 범위도 파일 시스템 개체로 제한된다.
- 즉, 파일 및 디렉터리에는 적용되지만 세마포어, 메시지 대기열 및 공유 메모리와 같은 IPC 개체에는 적용되지 않는다.
[umask 사용]
- 아래의 형식과 같이 권한이 설정된다.
actual_permissions = requested_permissions & ( ~umask );
- prototype은 아래와 같다.
#include <sys/types.h>
#include <sys/stat.h>
mode_t umask(mode_t new_umask);
- return 값은 호출 이전의 umask 값이다.
- umask 함수는 error return 을 하지 않는다.
- 현재 umask를 조회하는 query는 아래와 같다.
1: /* umask.c */
2:
3: #include <stdio.h>
4: #include <sys/types.h>
5: #include <sys/stat.h>
6:
7: mode_t
8: query_umask(void) {
9: mode_t old_umask;
10:
11: umask(old_umask = umask(0));
12: return old_umask;
13: }
14:
15: int
16: main(int argc,char **argv) {
17:
18: printf("umask = %04o\n",query_umask());
19: return 0;
20: }
- creat 함수는 아래와 같다.
#include <fcntl.h>
int creat(const char *path,mode_t mode);
- 아래의 open 함수와 같다.
open(path,O_CREAT|O_TRUNC|O_WRONLY,mode);
- mode_t mode의 parameter 값이 파일 권한으로 지정된다.
728x90