写入文件时,权限为只写

写入文件时,权限为只写

我用 C 打开一个文件并用以下代码编写它:

int fd = open("soandso.txt", O_RDWR | O_CREAT);
write(fd, buf_of_data, 3);

该文件现在仅对我有写权限,这不是我在 open 中指定的权限。我究竟做错了什么?

答案1

文件创建权限由该值修改umask

因此,例如:

$ umask
0022
$ touch xyz
$ ls -l xyz
-rw-r--r-- 1 sweh sweh 0 Sep 22 08:37 xyz

umask值符合标准读写模式,所以值为0022 删除 ----w--w-新创建的文件的权限。

我们可以改变这一点:

$ umask 002
$ touch abc
$ ls -l abc
-rw-rw-r-- 1 sweh sweh 0 Sep 22 08:38 abc

现在002面具只去除-------w-

创建没有屏蔽的文件

$ umask 0
$ touch def
$ ls -l def
-rw-rw-rw- 1 sweh sweh 0 Sep 22 08:40 def

如果您希望程序忽略该umask值,则必须umask(2)在调用之前显式调用该函数open(2)

open(2)请注意,与标志一起使用时O_CREAT,您还应该传递权限模式。例如

open("myfile",O_CREAT|O_RDWR,0666);

在这种情况下,模式字段也会通过值进行修改,umask因此创建的实际模式是(mode & ~umask)

相关内容