1

似乎无论我作为 PERMS 创建的文件都具有相同的权限 - rwx rx rx

我尝试了 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;
}
4

2 回答 2

5

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

umask(0000);

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

于 2013-01-01T17:56:24.387 回答
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 之一不匹配,并且如果文件是常规文件,则 bit S_ISGID(set-group-ID on execution ) 在从 chmod() 成功返回后将被清除。

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

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

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

返回值

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

于 2013-01-01T18:01:06.203 回答