【问题标题】:How to perform chmod() in Objective C如何在 Objective C 中执行 chmod()
【发布时间】:2015-02-13 04:24:13
【问题描述】:

什么是C的等价物:

 chmod(MY_FILE, 0777);

在目标 C 中?我正在尝试写入现有的锁定文件而不执行

chmod +x MY_FILE

在终端上。

【问题讨论】:

  • Objective-C 是 C 的超集。您可以在 iOS/OSX 上运行的任何 C 代码,您只需将其复制粘贴到您的 Objective-c 文件中即可。
  • @Linuxios,除了int NSArray; :-)
  • @paxdiablo 当然,除非你避免使用 @importing Cocoa.h、Foundation.h 等。但这将是一些相当无聊的 Objective-C!

标签: objective-c c file-permissions chmod


【解决方案1】:

您可以使用可可来做到这一点。

NSTask *changePerms = [[NSTask alloc] init];
[changePerms setLaunchPath:@"/bin/chmod"];
NSArray *chmodArgs = [NSArray arrayWithObjects:@"666", @"/Users/abc/hello.txt", nil]; 
[changePerms setArguments:chmodArgs];
[changePerms launch];

这是使用 NSFileManager 类的另一种方式

NSDictionary* attr = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithShort:0766], NSFilePosixPermissions, NULL];

NSError *error = nil;
[[NSFileManager defaultManager] setAttributes:attr ofItemAtPath:@"/Users/abc/Desktop/test.txt" error:&error];

使用 system() 调用

system("chmod 777 /Users/abc/Desktop/test.txt");

希望这会有所帮助!

【讨论】:

  • 你的第一个代码 sn-p 糟糕。当chmod() 随时可用时,对外部命令进行炮击真的是零点。
  • 要么使用原始 C 代码,要么依赖于任何框架 API。我给出的两个选项都是使用框架。
  • 使用[NSNumber numberWithUnsignedLong:___] 可能会更好,因为 chmod 可以处理更大的值。为了证明,对文件执行chmod u+s,然后对其执行stat -r,并查看第三个参数。 (至少它是我 Mac 上的第三个。)你会看到它比有符号空头可以容纳的数字(32768)和无符号空头可以容纳的数字(65535)更大。将相同的数字与 chmod 传递给另一个测试文件,你会看到 chmod 接受这个 unsigned long 值。
【解决方案2】:

您可以使用 Cocoa 的-setAttributes:ofItemAtPath:error: 来完成这项工作。

[[NSFileManager defaultManager] setAttributes:@{ NSFilePosixPermissions : @0666 }
                                 ofItemAtPath:… 
                                        error:&error];

你当然需要这样做的权利。

【讨论】:

    【解决方案3】:

    你可以使用C的chmod()

    在终端输入man 2 chmod获取文档及相关功能。

    【讨论】:

    • 恕我直言,@newbieMACUser 要求使用 ObjC 方式来执行此操作,而不是 C 方式,而 C 方式要求您执行库包含。对于 ObjC,Amin Negm-Awad's answer 更合适,并且不需要额外的包含,而不是使用默认的 Objective C 文件获得的标准基础内容。
    猜你喜欢
    • 2010-11-04
    • 2014-09-15
    • 2023-03-09
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2011-06-03
    • 2021-10-02
    相关资源
    最近更新 更多