LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1000|回复: 9

为什么umask()失效?

[复制链接]
发表于 2003-12-20 13:17:46 | 显示全部楼层 |阅读模式
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "ourhdr.h"
int main( void)
{
umask(0);
if (creat("foo",S_IRUSR | S_IWUSR |
                S_IRGRP | S_IWGRP |
                S_IROTH ) <0 )
printf ("create error for foo \n");
umask(S_IRGRP | S_IWGRP | S_IXGRP |#这里已屏蔽了组的 read and write and run
      S_IROTH | S_IWOTH | S_IXOTH);
if (creat("bar",S_IRUSR | S_IWUSR |
                S_IRGRP | S_IWGRP ) <0 )
printf( "create error for bar \n");
exit (0);
}

# ls -l foo bar
-rw-------    1 root     root            0 2003-12-20 04:12 bar
-rw-rw-r--    1 root     root            0 2003-12-20 04:12 foo

应该是创建bar出错的,为什么能创建bar文件?
发表于 2003-12-20 17:41:02 | 显示全部楼层
你是root?
 楼主| 发表于 2003-12-20 18:05:52 | 显示全部楼层
是的,我一直习惯用ROOT。
发表于 2003-12-20 18:36:02 | 显示全部楼层
umask并不是让你不能创建文件,而是屏蔽掉了几个权限位,比如umask是022,这时候你用0777创建的文件实际得到的权限是0755,
0755 = 0777 & ~022
发表于 2003-12-20 18:50:36 | 显示全部楼层
你是root,屏蔽对你有用吗?
 楼主| 发表于 2003-12-20 20:55:53 | 显示全部楼层
谢谢版主和_z_,没想到ROOT可以违反上面自己做的规则。
就象chmod 000 filename,照样可以看filename
BTW;这好象会乱套

还有一个问题不明白的:
可以使用shell命令umask,但用which ADN whereis 不能找到umask ??
# which umask
/usr/bin/which: no umask in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)
发表于 2003-12-20 22:33:21 | 显示全部楼层
所以root很NB呀 :)

man umask就可以知道,它是bash built-in command,
所以which找不到
发表于 2003-12-20 22:38:19 | 显示全部楼层
问个无聊的问题:你是GG还是MM?
 楼主| 发表于 2003-12-20 22:57:33 | 显示全部楼层
谢谢你!!请问bash built-in command是什么意思?我直译不通?

大家都好好学习!!
发表于 2003-12-21 00:31:07 | 显示全部楼层
那个是内建在bash中的,是bash自己的东西,而不是在你$PATH中的那些二进制文件或是shell文件.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表