我需要使用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字面意思并得到相同的结果。我错过了什么吗?
答案 0 :(得分:2)
您的代码看起来正确,应该按照您的意愿行事。您应该检查您的程序是否实际上创建文件:如果它已经存在,creat()
将成功而没有错误并更新时间戳,但不更改权限。