NSTask Tail -f Using objective C

Posted by Bach on Stack Overflow See other posts from Stack Overflow or by Bach
Published on 2011-01-12T01:26:28Z Indexed on 2011/01/14 13:53 UTC
Read the original article Hit count: 249

Filed under:
|
|

I need to read the last added line to a log file, in realtime, and capture that line being added.

Something similar to Tail -f.

So my first attempt was to use Tail -f using NSTask.

I can't see any output using the code below:

    NSTask *server = [[NSTask alloc] init];
    [server setLaunchPath:@"/usr/bin/tail"];
    [server setArguments:[NSArray arrayWithObjects:@"-f", @"/path/to/my/LogFile.txt",nil]];

    NSPipe *outputPipe = [NSPipe pipe];
    [server setStandardInput:[NSPipe pipe]];
    [server setStandardOutput:outputPipe];

    [server launch];
    [server waitUntilExit];
    [server release];

    NSData *outputData = [[outputPipe fileHandleForReading] readDataToEndOfFile];
    NSString *outputString = [[[NSString alloc] initWithData:outputData encoding:NSUTF8StringEncoding] autorelease];
    NSLog (@"Output \n%@", outputString);

I can see the output as expected when using:

[server setLaunchPath:@"/bin/ls"];
  1. How can i capture the output of that tail NSTask?

  2. Is there any alternative to this method, where I can open a stream to file and each time a line is added, output it on screen? (basic logging functionality)

© Stack Overflow or respective owner

Related posts about objective-c

Related posts about tail