You can use NSTask's setStandardInput:
, setStandardOutput:
and setStandardError:
selectors in conjunction with NSPipe instances to communicate with the launched program.
For example, to read the task's output:
task = [[NSTask alloc] init];
[task setStandardOutput: [NSPipe pipe]];
[task setStandardError: [task standardOutput]]; // Get standard error output too
[task setLaunchPath: @"/usr/bin/gdb"];
[task launch];
You can then obtain an NSFileHandle
instance that you can use to read the task's output with:
NSFileHandle *readFromMe = [[task standardOutput] fileHandleForReading];
To set up a pipe for sending commands to gdb, you would add
[task setStandardInput: [NSPipe pipe]];
before you launch the task. Then you get the NSFileHandle
with
NSFileHandle *writeToMe = [[task standardInput] fileHandleForWriting];
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…