我目前正在使用 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/