Cocoa wrapper for an interactive Unix command

Cocoa wrapper for an interactive Unix command

NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/usr/bin/gdb"];
[task launch];

task = [[NSTask alloc] init];
[task setStandardOutput: [NSPipe pipe]];
[task setStandardError: [task standardOutput]]; // Get standard error output too
[task setLaunchPath: @"/usr/bin/gdb"];
[task launch];

NSFileHandle *readFromMe = [[task standardOutput] fileHandleForReading];

[task setStandardInput: [NSPipe pipe]];

NSFileHandle *writeToMe = [[task standardInput] fileHandleForWriting];

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

NSPipe *outputpipe=[[NSPipe alloc]init];

NSPipe *errorpipe=[[NSPipe alloc]init];

NSFileHandle *output,*error;

[task setArguments: arguments];

[task setStandardOutput:outputpipe];

[task setStandardError:errorpipe];


NSLog(@"%@",arguments);


output=[outputpipe fileHandleForReading];

error=[errorpipe  fileHandleForReading];

[task launch];


[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedData:)  name: NSFileHandleReadCompletionNotification object:output];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedError:)  name: NSFileHandleReadCompletionNotification object:error];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(TaskCompletion:)  name: NSTaskDidTerminateNotification object:task];

//[input writeData:[NSMutableData initWithString:@"test"]];
[output readInBackgroundAndNotify];

[error readInBackgroundAndNotify];


[task waitUntilExit];



[outputpipe release];

[errorpipe release];
[task release];
-(void) receivedData:(NSNotification*) rec_not

{
NSFileHandle *out=[[task standardOutput] fileHandleForReading];
NSData *dataOutput=[[rec_not userInfo] objectForKey:NSFileHandleNotificationDataItem];
if( !dataOutput)

    NSLog(@">>>>>>>>>>>>>>Empty Data");

NSString *strfromdata=[[NSString alloc] initWithData:dataOutput encoding:NSUTF8StringEncoding];




[out readInBackgroundAndNotify];

[strfromdata release];

}



/* Called when there is some data in the error pipe */

-(void) receivedError:(NSNotification*) rec_not

{

NSFileHandle *err=[[task standardError] fileHandleForReading];
NSData *dataOutput=[[rec_not userInfo] ob

                    jectForKey:NSFileHandleNotificationDataItem];

if( !dataOutput)

    NSLog(@">>>>>>>>>>>>>>Empty Data");

else

{


    NSString *strfromdata=[[NSString alloc] initWithData:dataOutput encoding:NSUTF8StringEncoding];



    [strfromdata release];

}
[err readInBackgroundAndNotify];


}

/* Called when the task is complete */

-(void) TaskCompletion :(NSNotification*) rec_not

{  

NSLog(@"task ended");

}

No comments:

Post a Comment