我正在使用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-)可以工作,因为umask实际上将它们降为(rw-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。