我正在开发一个 Cocoa app ,必须执行一些终端命令。其中一个看起来像:
printf "\xc5\x20\x00\x00" >> aFile.txt
我尝试使用 NSTask (但我不确定如何拆分参数):
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/usr/bin/printf"];
[task setArguments:[NSArray arrayWithObjects:@"\"\\xc5\\x20\\x00\\x00\"",
@">>",
@"aFile.txt", nil]];
[task launch];
我得到的只是:
printf: missing format character
所以我认为“>>”不是printf参数,而是内部终端命令。
如何在Objective C中模拟该命令?
答案 0 :(得分:4)
您可能对NSTask方法感兴趣:
- (void)setStandardOutput:(id)file
和NSFileHandle方法:
+ (id)fileHandleForWritingAtPath:(NSString *)path
- (unsigned long long)seekToEndOfFile
答案 1 :(得分:1)
你没错,>>
令牌是一个shell功能,而不是printf的参数。
在这个例子中,我可能不会使用shell来执行此操作,而是编写代码以在Cocoa或plain C(使用stdio.h)中执行此操作。
但是,要使用shell >>
命令,您可以将该行发送到shell进程,该进程将正确解释>>
。
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/bin/bash"];
[task setArguments:[NSArray arrayWithObjects:@"-c",
@"printf \"\xc5\x20\x00\x00\" >> aFile.txt",
nil]];
[task launch];