Linux的mkdir函数无法授权完全权限。

6

我正在测试 mkdir 函数以创建新目录:

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

或者

 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)时会失败,有什么想法吗?

没有查找mkdir()函数,"511"对我来说看起来很奇怪,因为它没有给组和其他用户分配与用户相同的权限。此外,您提供了两个mkdir()函数的用法和一个测试示例,但都没有标明来源。在进行ls测试之前,您使用的是哪个版本? - David Thornley
mkdir的man(2)页面说模式是按提供的方式,与777进行AND运算,所以应该可以工作。你能提供更多细节吗?你使用的是哪个发行版和Linux版本?我希望你也在使用完全标准的glibc? - tjarratt
2
不是回答你的问题,但你应该使用mkdir("./linux",0777)而不是mkdir("./linux",511) - Keith Thompson
@tjarratt Ubuntu EGLIBC 2.13-0ubuntu13 - manuzhang
@KeithThompson 是的,那更直观。 - manuzhang
3个回答

7

来自 man 2 mkdir

参数 mode 指定要使用的权限。它通常会受到进程的 umask 的影响:所创建目录的权限是 (mode & ~umask & 0777)。

我建议您查看您的 umask - 它可能设置为 0022。在 mkdir 后尝试进行 chmod


我们能否得到一个代码示例?这是否意味着我可以调用 mkdir("dir", unmask(0777)) 来创建一个具有完全权限的目录?还是说无法创建具有完全权限的目录? - Aaron Campbell

3

系统调用如mkdiropen设置的权限总是与当前进程的umask进行掩码。您可以使用umask()函数更改当前的umask;在完成后,请确保将其设置回来。


3
我认为在 mkdir 之后进行 chmod 是更加清晰的解决方案。 - Keith Thompson

0

请查看umask函数:man 2 umask


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接