似乎我把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;
}
答案 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链接找到更多信息。