发布网友 发布时间:2022-04-21 22:05
共1个回答
热心网友 时间:2023-09-14 08:17
umask
#include <sys/stat.h>
mode_t umask(mode_t cmask);
说明:
其中cmask对应下面的9个位的“或”值:
S_IRUSR 用户读
S_IWUSR 用户写
S_IXUSR 用户执行
S_IRGRP 组读
S_IWGRP 组写
S_IXGRP 组执行
S_IROTH 其他读
S_IWOTH 其他写
S_IXOTH 其他执行
这9个位对应linux文件的权限位。
umask函数为进程设置文件模式创建屏蔽字,并返回以前的值。在进程创建一个新文件或新目录的时候,就一定会使用文件模式创建屏蔽字节,对于文件模式创建屏蔽字中为1的位,在创建文件函数create的mode对应的位则被关闭。
例如:
#include <unistd.h>
#include <sys/stat.h>
#define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
int main(void)
{
mode_t mask=umask(0);
if(creat("foo",RWRWRW)<0)
printf("create error for foo\n");
umask(S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
if(creat("bar",RWRWRW)<0)
printf("creat error for bar\n");
exit(0);
}
程序输出为:
lijsf@ubuntu:~$ umask
0002
lijsf@ubuntu:~$ ./a.out
lijsf@ubuntu:~$ ls -l foo bar
-rw------- 1 lijsf lijsf 0 Apr 27 01:59 bar
-rw-rw-rw- 1 lijsf lijsf 0 Apr 27 01:59 foo
lijsf@ubuntu:~$ umask
0002
可见umask函数并比改变父进程的文件屏蔽字。第一个文件foo的权限都没有屏蔽,所以最终权限为RW-RW-RW-。相应的第二个文件bar的屏蔽字为S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH,即066,最终的bar的权限对应的应为RW-------。