2012-01-03 55 views
4

我测试的mkdir函数来创建一个新的目录:linux下的mkdir功能不能充分授权许可

​​

folder = mkdir("./linux", 0777); 

folder = mkdir("./linux", S_IRWXU | S_IRWXG | S_IRWXO); 

,你可以看,我尝试授权对目录的完全许可,但这里是ls -l | grep linux

drwxr-xr-x 2 manuzhang manuzhang 4096 2012-01-04 06:53 linux 

为什么我不能授权组和其他人的写入权限?

更新
奇怪的事情,因为你们告诉我,我试过umask。它适用于任何umask(S_IWGRP)umask(S_IWOTH)失败umask(S_IWGRP | S_IWOTH),任何想法?

+0

头也不抬'的mkdir()',在“511”看起来很奇怪我的,因为它不分配相同的权限组和其他因为它给用户。此外,您给出了两个'mkdir()'的用法,以及一个不属于任何一个的测试示例。在'ls'测试之前你使用了什么版本? – 2012-01-03 23:06:38

+0

mkdir的man(2)页面表示该模式已提供,与777进行AND运算,因此应该可以工作。你能否提供更多的细节?你正在使用什么发行版和Linux发行版?我希望这是你使用的完全标准的glibc? – tjarratt 2012-01-03 23:11:20

+1

@DavidThornley 511 = 0777 – 2012-01-03 23:14:35

回答

0

检查umask的功能:人2的umask

2

权限由系统设定调用像mkdiropen总是反对掩盖当前进程的umask。您可以使用umask()函数更改当前的umask;确保在完成后将其恢复。

+2

我觉得做一个'chmod'后'mkdir'是一个清晰的解决方案。 – 2012-01-03 23:26:01

5

man 2 mkdir

参数模式指定要使用的权限。它是由过程的umask以通常的方式修改:创建的目录的权限是(模式&〜umask的& 0777)。

我建议你看一下你的umask - 这可能是设置为0022。试试chmod post-mkdir

+0

完美的答案。 – 2014-01-17 07:29:22

+0

我们可以得到一个代码示例吗?这是否意味着我可以调用'mkdir(“dir”,unmask(0777))'来创建一个具有完全权限的目录?或者说不可能创建一个具有完全权限的目录? – 2016-11-23 02:06:51