【发布时间】:2011-12-14 19:55:59
【问题描述】:
我目前正在使用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--)。但我的问题是:这总是有保证的吗?我的第三个参数实际上应该是什么?
【问题讨论】:
-
我认为当您没有特别需要不同权限时,通常您将
0644(例如rw-r--r--)作为权限传递给open()。我只能猜测,但我认为这就是NSData所做的。 -
是的,这不是一个坏猜测,但我想完全确定;)
-
唯一能完全确定的方法是以某种方式获得对 Foundation 的源代码访问权限,而您将永远无法获得。但是,如果您想要一种更底层的方式来访问文件但仍然使用 Cocoa,您可以使用NSFileHandle,它提供了一个类方法,该方法将在路径上创建一个文件并打开它以进行写入。可以假设这使用与 NSData 方法相同的默认权限。
-
我实际上正准备使用 NSFileHandle,但开始怀疑它是否与 open() 和 write() 调用一样快。我正在做的这些事情非常重复和密集……
-
@KevinBallard 否。当您没有特别需要不同权限时,通常会将 0666 作为权限传递给
open()。然后用户的 umask 修改它(用户通常将此设置为 0022,因此 0644 是新文件的常用权限)。见umask(2)。
标签: objective-c c cocoa file permissions