open函数CREAT参数的0664模式是什么意思?
时间: 2024-03-27 07:39:59 浏览: 124
在 `open()` 函数的 `O_CREAT` 标志中指定文件创建模式时,通常使用八进制数表示,例如 `0644` 或 `0777` 等。这些八进制数表示了文件的权限和属性信息,其中的每个数字分别表示文件所有者、文件所属组和其他用户的权限,每个数字又由三个二进制位表示,分别表示读、写和执行权限,其中:
- `r`:读权限;
- `w`:写权限;
- `x`:执行权限。
因此,`0644` 表示文件所有者具有读写权限,文件所属组和其他用户只具有读权限。具体地,`0` 表示该数字为八进制数,`6` 表示文件所有者具有读写权限(二进制为 `110`),`4` 表示文件所属组和其他用户只具有读权限(二进制为 `100`)。
另外,还有一些常用的文件创建模式如下:
- `0755`:文件所有者具有读、写和执行权限,文件所属组和其他用户具有读和执行权限。
- `0777`:文件所有者、文件所属组和其他用户都具有读、写和执行权限。这个模式比较危险,不建议在生产环境中使用。
例如,下面的代码打开名为 `example.txt` 的文件,如果文件不存在则创建文件,如果文件已经存在,则打开该文件并清空文件内容,同时指定文件创建模式为 `0664`:
```c
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd = open("example.txt", O_CREAT | O_WRONLY | O_TRUNC, 0664);
if (fd < 0) {
perror("open");
return -1;
}
char buf[] = "Hello, world!";
int n = write(fd, buf, sizeof(buf));
if (n < 0) {
perror("write");
close(fd);
return -1;
}
close(fd);
return 0;
}
```
如果文件 `example.txt` 不存在,则会创建一个新的文件并写入数据,同时指定文件权限为 `-rw-rw-r--`;如果文件已经存在,则会打开该文件并清空文件内容,然后写入新的数据。
阅读全文