umask function - ggubuk97/apue GitHub Wiki
unmask : ํ์ฌ ํ๋ก์ธ์ค์ ๋ํ ํ์ผ ๋ชจ๋ ์์ฑ ๋ง์คํฌ๋ฅผ ์ค์ ํ๊ณ ๋ง์คํฌ์ ์ด์ ๊ฐ์ ๋๋ ค์ค
#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๋ฅผ ๋ณ๊ฒฝํด์ผํ๋ค.
ํ ํ๋ก์ธ์ค๊ฐ ํ์ผ ๋ชจ๋ ์์ฑ ๋ง์คํฌ๋ฅผ ๋ณ๊ฒฝํด๋ ๋ถ๋ชจ ๋ง์คํฌ๋ ๋ณํ์ง ์๋๋ค.
์์ 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๋ก ๋ค์ ์์ฑํ ๊ฒฝ์ฐ ํ์ผ์ ์ ๊ทผ ๊ถํ ๋นํธ๋ ๋ณํ์ง ์๋๋ค.