我有以下来自 apue 书的代码:
#define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
int
main()
{
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("create error for bar");
exit(0);
}
在 中terminal
,我首先umask
获取当前模式创建:我得到 0002。然后运行此程序。我得到以下内容:
$ ls -l foo bar
-rwxrwxrwx. 1 root root 0 May 15 14:28 bar
-rwxrwxrwx. 1 root root 0 May 15 14:28 foo
但它应该是这样的:
$ ls -l foo bar
-rw------- 1 sar 0 Dec 7 21:20 bar
-rw-rw-rw- 1 sar 0 Dec 7 21:20 foo
那么到底发生了什么?为什么我的程序中的 umask 不起作用?