我使用以下代码创建文件:
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
const char* filename = "./test.out";
int fd;
if(-1 == (fd = open(filename, O_CREAT|O_RDWR, 0666)))
{
perror("Error");
errno = 0;
}
else
puts("File opened");
if(-1 == (close(fd)))
{
perror("Error");
errno = 0;
}
else
puts("File closed");
return 0;
}
我将mode
参数指定为0666
,它应该授予每个人读,写访问权限。但是,ls -l
显示
-rw-r--r-- 1 kmehta users 0 2012-01-29 16:29 test.out
如您所见,写权限仅授予文件所有者。我不知道为什么其他人都没有被正确授予权限。 chmod a+w test.out
正确设置权限。
代码编译为gcc -Wall test.c
规格:关于Opensuse 11.3 64位的gcc v 4.5.0
答案 0 :(得分:16)
mode
的{{1}}参数指定最大允许的权限。然后应用open
设置以进一步限制权限。
如果您需要将权限设置为0666,则在打开成功后,您需要在文件句柄上使用umask
。
答案 1 :(得分:5)
执行此代码:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void)
{
int fd;
if((fd = open("new.file",O_CREAT,S_IRWXU | S_IRWXG | S_IRWXO)) == -1)
{
perror("open");
return 1;
}
close(fd);
return 0;
}
在我的Linux机器上,其中umask
返回0022
,为我提供了一个包含以下属性的文件:
-rwxr-xr-x 1 daniel daniel 0 Jan 29 23:46 new.file
因此,正如您所看到的,umask屏蔽了我的写入位。它看起来在您的系统上也是一样的。