当前位置:嗨网首页>书籍在线阅读

15-进程的文件模式创建掩码_umask()

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

15.4.6 进程的文件模式创建掩码:umask()

本节将针对新建文件或目录的权限设置展开深入讨论。对于新建文件,内核会使用open()或creat()中mode参数所指定的权限。对于新建目录,则会根据mkdir()的mode参数来设置权限。然而,文件模式创建掩码(简称为 umask)会对这些设置进行修改。umask是一种进程属性,当进程新建文件或目录时,该属性用于指明应屏蔽哪些权限位。

进程的umask通常继承自其父shell,其结果往往正如人们所期望的那样:用户可以使用shell的内置命令umask来改变shell进程的umask,从而控制在shell下运行程序的umask。

大多数shell的初始化文件会将umask默认置为八进制值022 (----w--w-)。其含义为对于同组或其他用户,应总是屏蔽写权限。因此,假定open()调用中的mode参数为0666(即令所有用户享有读、写权限,通常如此),那么对新建文件来说,其属主拥有读、写权限,所有其他用户只具有读权限(针对文件执行ls–l命令,会显示“rw-r--r—”)。同理,假定将mkdir()的mode参数指定为0777(即所有用户享有所有权限),那么对于新建目录来说,其属主享有所有权限,同组和其他用户则只拥有读取和执行权限(即rwxr-xr-x)。

系统调用umask()将进程的umask改变为mask参数所指定的值。

357.png 可以以八进制数或是表15-4中所列常量相或(|)来指定mask参数。

对umask()的调用总会成功,并返回进程的前一umask。

程序清单15-5演示了umask()与open()和mkdir()的相互配合。运行该程序的结果如下:

358.png

程序清单 15-5使用mkdir()和rmdir()系统调用来创建和删除目录,使用unlink()系统调用来删除文件。以上系统调用将在第18章再做讲解。

程序清单15-5:使用umask()