2

有人可以帮我将以下代码转换为具有“cat”和“grep”两个 NSTask 的代码,展示如何将两者通过管道连接在一起吗?我想我更喜欢后一种方法,从那时起我不再需要担心引用和其他东西。

NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/sh"];

NSArray *arguments;
arguments = [NSArray arrayWithObjects: @"-c",
             @"cat /usr/share/dict/words | grep -i ham", nil];
[task setArguments: arguments];
[task launch];

更新:请注意, cat 和 grep 在这里只是作为(糟糕的)示例。我仍然想为更有意义的命令执行此操作。

4

1 回答 1

3

为每个程序使用一个实例NSTask并将它们的标准输入/输出连接到NSPipe

NSPipe *pipe = [[NSPipe alloc] init];
NSPipe *resultPipe = [[NSPipe alloc] init];

NSTask *task1 = [[NSTask alloc] init];
[task1 setLaunchPath: @"/bin/cat"];
[task1 setStandardOutput: pipe];
[task1 launch];

NSTask *task2 = [[NSTask alloc] init];
[task2 setLaunchPath: @"/bin/grep"];
[task2 setStandardInput: pipe];
[task2 setStandardOutput: resultPipe];
[task2 launch];

NSData *result = [[resultPipe fileHandleForReading] readDataToEndOfFile];
于 2011-06-05T17:29:44.447 回答