Cocoa - 在文件末尾添加一些字节

时间:2011-11-07 14:02:55

标签: objective-c cocoa terminal printf nstask

我正在开发一个 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中模拟该命令?

2 个答案:

答案 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];