2

次のコードを、代わりに「cat」と「grep」の 2 つの NSTask を持つコードに変換して、2 つをパイプで接続する方法を示すのを手伝ってくれませんか? 引用などについて心配する必要がなくなるので、私は後者のアプローチを好むと思います。

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 に答える