gpt4 book ai didi

cocoa - fopen 和 open 生成具有不同文件权限的文件

转载 作者:行者123 更新时间:2023-12-03 16:24:55 25 4
gpt4 key购买 nike

这两个代码片段生成具有不同文件权限的文件。示例 1 创建了预期的默认文件权限,但示例 2 没有。对此有何解释?

操作系统:Mac OS X 版本:10.6.4

Xcode 版本:3.2.2,64 位

<小时/>
// Example 1
FILE *fh1 = fopen("Test1.txt", "w+x");

if (fh1) {
fwrite("TEST1", 1, 5, fh1);
fclose(fh1);
}

创建:-rw-r--r-- 1 我员工 5 7 月 29 日 00:41 Test1.txt

// Example 2
int fh2 = open("Test2.txt", O_EXCL | O_CREAT | O_WRONLY);

if (fh2 >= 0) {
write(fh2, "TEST2", 5);
close(fh2);
}

创建:---------- 1 我工作人员 5 7 月 29 日 00:41 Test2.txt

最佳答案

当您使用O_CREAT时,您需要向open添加第三个参数,即模式。例如:

int fh2 = open("Test2.txt",
O_EXCL | O_CREAT | O_WRONLY,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);

这相当于 0666。请注意,此模式随后会被进程的 umask 屏蔽,这意味着您指定的权限通常会有所减少。典型的 umask 是 0022,这将导致模式为 0666 & ~0222 = 0644,即 -rw-r--r--

来自人开:

The oflag argument may indicate that the file is to be created if it does not exist (by specifying the O_CREAT flag). In this case, open requires a third argument mode_t mode; the file is created with mode mode as described in chmod(2) and modified by the process' umask value (see umask(2)).

关于cocoa - fopen 和 open 生成具有不同文件权限的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3362583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com