如何在Objective C中执行chmod()函数

5

C语言中的等价代码是什么:

 chmod(MY_FILE, 0777);

在Objective C中如何写入已锁定的文件而不执行

chmod +x MY_FILE

在终端上。

5
Objective-C是C语言的超集。任何你可以在iOS/OSX上运行的C代码,你只需要将其复制粘贴到Objective-C文件中,它就能够工作。 - Linuxios
1
@Linuxios,除了int NSArray;也许不行 :-) - paxdiablo
1
除非您避免导入 Cocoa.h,Foundation.h 等,否则@paxdiablo的建议就是无效的。但那将会是一些相当乏味的 Objective-C! - Nicolas Miari
3个回答

9

您可以使用Cocoa的-setAttributes:ofItemAtPath:error:方法来完成这个任务。

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

当然,您需要具有相应的权限才能进行该操作。

3

您可以使用C语言的chmod()函数。

在终端中输入man 2 chmod查看相关文档和函数。


1
在我看来,@newbieMACUser要求使用ObjC的方式来完成这个问题,而不是C的方式,而且C的方式需要进行库包含。使用ObjC,Amin Negm-Awad的答案更加适合,而且只需要使用默认Objective C文件中提供的标准Foundation库,无需额外的包含。 - Volomike

-1

你可以使用Cocoa来实现这个。

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");

希望这能帮到你!

2
你的第一段代码非常糟糕。当chmod()函数随手可得时,调用外部命令没有任何意义。 - nneonneo
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Seema Kadavan
最好使用[NSNumber numberWithUnsignedLong:___],因为chmod可以处理更大的值。 为了证明,请在文件上执行chmod u+s,然后执行stat -r并查看第三个参数。(至少在我的Mac上是第三个。)您会发现它是一个比有符号短整型可以容纳的数字大的数字,即32768,以及无符号短整型可以容纳的数字,即65535。将相同的数字与chmod一起传递到另一个测试文件中,您将看到chmod接受此无符号长整型值。 - Volomike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接