mkdir()sys中的访问模式调用linux c

时间:2016-10-03 12:28:00

标签: c linux mkdir

我有一部分代码

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吗?没有那样做是否有任何改变?

4 个答案:

答案 0 :(得分:2)

无法列出没有可执行权限的目录。

除了设置umask(0)之外,还可以使用模式0777创建目录。

答案 1 :(得分:2)

进程的umask值掩盖了非所有者的写入权限。见https://en.wikipedia.org/wiki/Umask

  

在计算中,umask是一个确定a的设置的命令   掩码,用于控制如何为新创建的文件权限设置   文件。它也可以指一个设置掩码的函数,或者它可能   引用掩码本身,正式称为文件模式   创作面具。掩码是一组位,每个位都受到限制   如何为新创建的文件设置相应的权限。

umask值是进程的全局值。因此,调用umask()将影响流程中运行的所有线程,以及更改值后生成的所有子进程。

要安全地确保文件或目录权限而不影响流程的其余部分,您需要使用chmod()显式设置权限:

int rc;
mode_t mode = 0777;

rc = mkdir( name, mode );
if ( 0 == rc )
{
    rc = chmod( name, mode );
}
.
.
.

如果您真的想要更改umask(),最好将其设置为您需要的内容,然后将其恢复

mode_t old_mask = umask( 0 );
int rc = mkdir( name, 0777 );
umask( old_mask );

答案 2 :(得分:0)

尝试拨打

umask(0);
<{1>}之前的

,因为mkdir会对新创建的目录的权限产生影响。

答案 3 :(得分:0)

大多数Linux发行版使用默认umask = 022。这意味着当您使用权限mkdir呼叫777时,您将获得权限:777(asked) - 022(umask) = 0755(actual)。实际上,umask 应该从新创建的文件/目录中删除哪些权限,其中每个八进制数字表示:

0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : nothing

制作umask(0),您将在创建的目录上收到777的权限。