Skip to content
flowergom edited this page Oct 17, 2015 · 2 revisions

unmask : 현재 프로세스에 대한 파일 모드 생성 마스크를 설정하고 마스크의 이전 값을 돌려줌

example 4.9
#include "apue.h"
#include <fcntl.h>
// 사용자 읽기 및 쓰기, 그룹 읽기 및 쓰기 , 기타 읽기 및 쓰기 권한 설정
#define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) 
int
main(void)
{
umask(0);
if (creat("foo", RWRWRW) < 0)
err_sys("creat error for foo");
// 그룹 읽기 및 쓰기, 기타 읽기 및 쓰기 권한 제거
umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); 
if (creat("bar", RWRWRW) < 0)
err_sys("creat error for bar");
exit(0);
}
실행 결과
$ :~/apue.3e$ umask
0002 // 기타 쓰기 금지
$ :~/apue.3e$ ./4.9.out 
$ :~/apue.3e$ ls -al foo bar
-rw------- 1 nate.kim nate.kim 0 10월 14 21:17 bar
-rw-rw-rw- 1 nate.kim nate.kim 0 10월 14 21:17 foo
$ :~/apue.3e$ umask
0002  // mask of its parent

새 파일을 생성할때 접근 권한을 설정하려면, 프로세스가 실행 되는 도중에 umask를 변경해야한다.

한 프로세스가 파일 모드 생성 마스크를 변경해도 부모 마스크는 변하지 않는다.

3.1 연습 문제 4.4

위의 example 4.9 프로그램을 foo와 bar를 생성 하고 나서 실행하면 어떤 일이 생길까?

$ date > foo
$ date> foo
$ cat foo
2015. 10. 14. (수) 21:43:56 KST
$ ls -al foo bar
-rw-r----- 1 nate.kim nate.kim 33 10월 14 21:44 bar
-rw-r----- 1 nate.kim nate.kim 33 10월 14 21:43 foo
$ ./4.9.out 
$ ls -al foo bar
-rw-r----- 1 nate.kim nate.kim 0 10월 14 21:44 bar
-rw-r----- 1 nate.kim nate.kim 0 10월 14 21:44 foo
$ cat bar
$ cat foo

create 함수의 정의는 다음과 같다.

#include <fcntl.h>
int creat(const char *path,mode_tmode);
Returns: file descriptor opened for write-only if OK, −1 on error

그리고 이 함수는 open(path,O_WRONLY | O_CREAT | O_TRUNC,mode); 와 동일한 결과를 나타 내므로

4.9 예제 실행시 foo와 bar 파일 사이즈는 O_TRUNC 되어 0으로 변하게 된다.

$ date > foo
$ date > bar
$ chmod a-r foo bar
$ ls -al foo bar
--w--w---- 1 nate.kim nate.kim 33 10월 14 21:59 bar
--w--w---- 1 nate.kim nate.kim 33 10월 14 21:58 foo
$ chmod a-w foo bar
$ ls -al foo bar
---------- 1 nate.kim nate.kim 33 10월 14 21:59 bar
---------- 1 nate.kim nate.kim 33 10월 14 21:58 foo
$ ./4.9.out 
creat error for foo: Permission denied

create 함수는 파일을 오직 쓰기 전용으로 열 수 있기 때문에, 쓰기 권한을 제거 되면 동작 하지 않는다. (3.4장 참고)

$ chmod a+w foo bar
$ ls -al foo bar
--w--w--w- 1 nate.kim nate.kim 33 10월 14 21:59 bar
--w--w--w- 1 nate.kim nate.kim 33 10월 14 21:58 foo
$ chmod o-w foo bar
$ ls -al foo bar
--w--w---- 1 nate.kim nate.kim 33 10월 14 21:59 bar
--w--w---- 1 nate.kim nate.kim 33 10월 14 21:58 foo
$ chmod g-w foo bar
$ ls -al foo bar
--w------- 1 nate.kim nate.kim 33 10월 14 21:59 bar
--w------- 1 nate.kim nate.kim 33 10월 14 21:58 foo
$ umask -S
u=rwx,g=rwx,o=rx
$ ./4.9.out 
$ ls -al foo bar
--w------- 1 nate.kim nate.kim 0 10월 14 22:01 bar
--w------- 1 nate.kim nate.kim 0 10월 14 22:01 foo

또한 이미 존재 하고 있는 파일을 open이나 create로 다시 생성한 경우 파일의 접근 권한 비트는 변하지 않는다.

Clone this wiki locally