コードを拝見させていただきましたが、結局、一旦パイプに出したデー
タを受け取るんですね? うまくいくかな…。

ちなみに私のコードは以下の通りです。obj-C をよく知らないので汚い
のはご容赦!

NSAutoreleasePool*pool=[[NSAutoreleasePool alloc] init];
NSTask *task = [ [ NSTask alloc ] init ];
NSPipe *newPipe = [ NSPipe pipe];
NSFileHandle *readHandle = [newPipe fileHandleForReading];
NSData *outData = nil;
NSString *outString = nil;

task=[[NSTask alloc] init];
[task setLaunchPath : @"/bin/ls" ];
[task setArguments : [ NSArray arrayWithObjects : @"-R", @"-F", path, nil] ];
[task setStandardOutput : newPipe];
[task launch ];

while ((outData = [readHandle availableData]) && [outData length]) {
  outString = [[NSString alloc] initWithData:outData encoding:NSShiftJISStringEncoding];
  [outString writeToFile : tmppath atomically : YES ];
  // tmppath は別のところで定義しています
}
[pool release];