【发布时间】:2016-10-03 12:27:59
【问题描述】:
我有一部分代码
if(mkdir(name, 0666/*permission*/) == -1)
{
printf("ERROR");
return ERROR;
}
新创建的目录看起来像
drw-rw-r-- 2 atg atg 4096 Oct 3 17:54 f,,,
但我希望它对其他人具有写入权限,即drw-rw-rw-。
当我尝试进入目录时,使用cd,我得到
bash: cd: f: 权限被拒绝
如果我用执行权限创建它,像这样:
if(mkdir(name, 0777/*permission*/) == -1)
{
printf("ERROR");
return ERROR;
}
我明白了
drwxrwxr-x 2 atg atg 4096 Oct 3 18:00 f
我可以使用cd 进入目录。
有
if(mkdir(name, 0777/*permission*/) == -1)
{
printf("ERROR");
return ERROR;
}
我明白了
dr-xr-xr-x 2 atg atg 4096 Oct 3 18:02 f
为什么没有设置写权限?
我用 chmod 作为
case RD_WRT_DATA:
permission = 0666;
break;
if(mkdir(name, permission) == -1)
{
printf("ERROR");
return ERROR;
}
else
{
return SUCCESS;
}
if(chmod(name, permission) == -1)
{
printf("ERROR");
return ERROR;
}
else
{
return SUCCESS;
}
已检查 umask:
grep UMASK /etc/login.defs
UMASK 022
我得到的权限仍然是->
drw-rw-r-- 2 atg atg 4096 Oct 3 18:15 f
我应该更换umask吗?不这样做有什么替代方法吗?
【问题讨论】:
-
但是需要的权限是
drw-rw-rw-- 你确定吗?这意味着没有人可以访问目录中的任何内容。你需要x来访问目录的内容(如果你知道那里有什么),并且需要r来列出内容,但是没有x的r几乎没用 -
您应该使用
perror(name);(而不是printf("ERROR");....)进行错误处理