《UNIX环境高级编程》笔记--umask函数
umask函数为进程设置文件模式创建屏蔽字,并返回以前的值。函数的定义如下:
所以0002代表屏蔽了其他写权限。如果是0077呢,代表屏蔽了组读写执行和其他读写执行。
实践:
int main(void){ umask(S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH|S_ISUID|S_ISGID); if(creat("a",S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH|S_ISUID|S_ISGID)<0){ perror("creat"); return -1; } return 0;}运行结果:yan@yan-vm:~/apue$ ll a
-rwS--S--- 1 yan yan 0 Jun 12 13:32 a还是成功设置了setuid和setgid,在网上查了下有人说umask函数会自动清除mode的setuid,setgid和stick标志
位,所以在umask中就不需要设置设3个标志位,虽然不是权威的资料,但是从现象上来看是正确的,如果有人知
道也请在评论中告诉我,谢谢~