有人可以帮助我将以下代码转换为代码,而代码中有两个用于“cat”和“grep”的NSTasks,显示两者如何通过管道连接在一起?我想我更喜欢后一种方法,因为那时我不再需要担心引用和填充。
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在这里只是作为(糟糕的)示例。我仍然希望为更有意义的命令执行此操作。
答案 0 :(得分: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];