分类: 系统运维
2012-03-28 13:25:59
既然我们已经描述了每个文件相关的9个权限位,我们可以描述下与每个进程相关取的文件模式创建掩码(file mode creation mask)。
umask函数为进程设置文件模式创建掩码,并返回其之前的值。(这是很少的几个不返回错误值的函数之一。)
cmask参数由4.5节里的表中的9个常量的任意位或的值:S_IRUSR、S_IWUSR等。
每当进程创建一个新文件或一个新目录时,文件模式创建掩码就会被使用。(回想下3.3节和3.4节里我们对open和creat函数的描述。两者都接受一
个mode参数来指定新文件的访问权限位。)我们在4.20节讲述如何创建一个新的目录。文件模式创建掩码的任何位都会在文件模式里关闭。
看下面的例子:
UNIX系统的多数用户从不处理他们的umask值。它通常在登录时被shell的start-up文件设置一次,然后不再改变。尽管如此,当写创建新文
件的程序时,如果我们想保证特定的访问权限位被启用,我们则必须在进程运行时修改umask的值。比如,如果我们想要保证每个人都能读取一个文件,我们应
该设置umask为0。不然,当我们进程运行时,起效的umask值会导致权限位被关闭。
在前一个例子里,我们使用shell的umask命令在我们运行程序前后打印文件模式创建掩码。这给我们展示了改变一人进程的文件模式创建掩码不会影响它
父进程(通常是shell)的掩码。所有的shell都有一个内建的umask命令,我们可以用它来设置或打印当前的文件模式创建掩码。
用户可以设置umask值来控制他们创建的文件的默认权限。这个值以八进程表示,其中每个位表示一个屏蔽的权限,如下表所示:
umask的文件模式访问权限位 | |
掩码位 | 含义 |
0400 | 用户读 |
0200 | 用户写 |
0100 | 用户执行 |
0040 | 组读 |
0020 | 组写 |
0010 | 组执行 |
0004 | 其他人读 |
0002 | 其他人写 |
0001 | 其他人执行 |