umask function - ggubuk97/apue GitHub Wiki

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๋กœ ๋‹ค์‹œ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ ํŒŒ์ผ์˜ ์ ‘๊ทผ ๊ถŒํ•œ ๋น„ํŠธ๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ