c - OS X 中的 POSIX API 是否需要比 Cocoa 更高的权限

标签 c macos cocoa posix

在 OS X 中:

我使用 Cocoa API 在用户的桌面上创建一个目录,它工作正常。 但是,如果我使用 POSIX 函数

int mkdir(const char *path, mode_t mode);

在用户的桌面上创建目录,总是失败并返回-1。 但是我在应用程序域目录中测试了 mkdir(),它起作用了。 那么,在 OS X 中调用非 Cocoa API 时是否需要更多权限?

解释为什么我需要调用 POSIX API:

我想创建一些带有属性的特殊目录,我搜索使用 setxattr () 会添加我想要的所有属性,但我找不到 Cocoa 的方法来使用 setxattr(),Cocoa API 中是否有相应的类、方法或函数?

最佳答案

我有一篇关于使用 startAccessingSecurityScopedResource 的好文章,但根据评论,问题似乎是请求的目录不正确。

您可以在需要时轻松地在 Cocoa 风格和 POSIX API 之间切换。在需要时执行此操作应该没有真正的问题。您应该始终使用 [NSFileManager defaultManager]URLsForDirectory 方法来获取用户特定的目录,因为它们可能与您预期的不同。

你应该使用类似于:

NSString *desktopDir = nil;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *urls = [fileManager URLsForDirectory:NSDesktopDirectory inDomains:NSUserDomainMask];

if ([urls count] > 0) {
    NSURL *desktopURL = [urls objectAtIndex:0];
    NSLog(@"%@", desktopURL);
    desktopDir = desktopURL.path;
}
if (desktopDir != nil) {
    NSString *xx = [desktopDir stringByAppendingPathComponent:@"/XXX"];
    mkdir(xx.UTF8String, 0755);
}

关于c - OS X 中的 POSIX API 是否需要比 Cocoa 更高的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13007082/

相关文章:

macos - 苹果的 "DVD or CD Sharing"协议(protocol)是如何工作的?

objective-c - NSOutlineView 和 NSCell (NSTextFieldCell) 上的自定义选择

objective-c - "-Weverything"产生 "Comparing floating point with == or != is unsafe"

objective-c - vec4 内核例程上的编译器错误

c++ - 在 arm-linux-androideabi-gcc 上使用 c/c++ 宏对 char '#' 进行字符串化

macos - 无法下载,$GOPATH 未设置

c - 显示 MSB 到 LSB

iphone - iphone 应用程序的安全登录和 session 管理

c - 访问 struct 中的 char 数组显示越界错误

c - 如何在 Debug模式下查看动态分配内存的值?