objective-c - 使用 open() 保证文件权限与使用 NSData 文件写入方法写入的文件的权限相同

标签 objective-c c cocoa file permissions

我目前正在使用 open() 以下列方式写出一个文件:

NSString *path = @"/Users/enchilada/Desktop/file.txt";
int fd = open([path fileSystemRepresentation],
              O_EXCL | O_CREAT | O_WRONLY,
              S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);

我的问题是第三个参数。它是否“正确”,因为它保证在所有情况下都产生与 NSData 的常规 writeToFile: 方法完全相同的权限?

我想在使用普通 open() 而不是使用 Cocoa 的方法写出文件时获得适当的“默认”权限。

我发现上述权限 (rw-rw-rw-) 有效,因为 umask 实际上将它们降低 为 (rw-r--r--)。但我的问题是:这总是有保证吗?我的第三个参数实际上应该是什么?

最佳答案

我们可以使用dtruss找出来。这是我的测试程序:

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
    @autoreleasepool {
        [[NSData dataWithBytes:"hello\n" length:6] writeToFile:@"/tmp/data.out" atomically:NO];
    }
    return 0;
}

这是我的运行日志:

$ sudo dtruss ~/Library/Dev*/Xcode/De*/datatest-*/B*/P*/D*/datatest 2>&1 | fgrep data.out
open("/tmp/data.out\0", 0x601, 0x1B6)        = 3 0

十六进制 0x1B6 是八进制 0666。

关于objective-c - 使用 open() 保证文件权限与使用 NSData 文件写入方法写入的文件的权限相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8510815/

相关文章:

swift - 如何防止 MacOS WebView 在点击选项卡后失去第一响应者?

cocoa - NSTableColumn 绑定(bind)到 BOOL 值

c++ - 'initialization'到底是什么意思?

c++ - 如何在 Visual Studio Code 中的构建目标之间切换?

macos - 当应用程序处于后台时, cocoa 计时器不会触发

ios - 设置 keyWindow rootViewController 在 iOS8 中不起作用

c - 如何使用 C 中的初等变换计算非奇异矩阵 (n*n) 的行列式?

ios - 如何获取 iOS 设备型号(例如 A1530)?

ios - 如何在 iOS 中将 jpg 或 png 转换为 svg?

ios - CoreData 错误存储包含 ä、ö、ü、ß 的字符串