创建文件并分配权限

时间:2013-01-01 17:53:03

标签: c posix file-permissions

似乎我把PERMS所创建的文件具有相同的权限 - rwx r-x r-x

我尝试了755和777,权限保持不变。

#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/stat.h>
#define PERMS 0777

int main(int argc, char *argv[])
{
    int createDescriptor;
    char fileName[15]="Filename.txt";

    if ((createDescriptor = creat(fileName, PERMS )) == -1)
    {
        printf("Error creating %s", fileName);
        exit(EXIT_FAILURE);
    }

    if((close(createDescriptor))==-1)
    {
        write(2, "Error closing file.\n", 19);
    }

    return 0;
}

2 个答案:

答案 0 :(得分:5)

我认为您可能需要在调用creat之前更改umask:

umask(0000);

请参阅man 2 umask。默认的umask通常是0022,这将使0777和0755之间的差异完全消失。

答案 1 :(得分:0)

尝试使用chmod功能。如需更多详细信息,只需右键点击IDE并输入chmod

即可

命名

chmod - 更改文件的模式

<强>概要

 #include <sys/stat.h>
 int chmod(const char *path, mode_t mode);

<强>描述

chmod()函数应将S_ISUID, S_ISGID, [XSI] S_ISVTX,和由path参数指向的路径名指定的文件的文件权限位更改为mode参数中的相应位。应用程序应确保进程的有效用户ID与文件所有者匹配,或者进程具有适当的权限才能执行此操作。

S_ISUID, S_ISGID, [XSI] S_ISVTX,和文件权限位在<sys/stat.h>.

中描述

如果调用进程没有适当的权限,并且文件的组ID与有效组ID或其中一个补充组ID不匹配,并且文件是常规文件,则为S_ISGID位从chmod()成功返回时,应清除文件模式下的(执行时set-group-ID)。

其他实现定义的限制可能会导致模式中的S_ISUID and S_ISGID位被忽略。

在调用chmod()时打开的文件对文件描述符的影响是实现定义的。

成功完成后,chmod()将标记更新文件的st_ctime字段。

返回值

成功完成后,0将被退回;否则,将返回-1并设置错误以指示错误。如果返回-1,则不会更改文件模式。  可以在this链接找到更多信息。