creat系统调用无法设置权限

时间:2014-05-07 16:04:55

标签: permissions system-calls

我需要使用creat系统调用来创建文件(它在遗留代码中使用,我不允许更改它;下面的示例是简化的但问题是相同的)。我有以下代码:

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main() 
{
    umask(0);
    int hndl = creat("abc.dat", S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); // == 0660
    close(hndl);
}

按预期创建文件(我也检查了时间戳),但权限与0660不同:

$ gcc creat.c && ./a.out && ll | grep abc
-rwx---r-x 1 ulysses ulysses     0 May    7 19:42 abc.dat*

这是0705.我尝试使用0660字面意思并得到相同的结果。我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

您的代码看起来正确,应该按照您的意愿行事。您应该检查您的程序是否实际上创建文件:如果它已经存在,creat()将成功而没有错误并更新时间戳,但更改权限。