Ich muss die letzte Zeile zu einer Log-Datei in Echtzeit lesen, und erfassen Sie diese Zeile hinzugefügt werden.Wie bekomme ich etwas ähnlich wie Tail -f mit NSTask
Ähnlich wie Tail -f.
Also war mein erster Versuch, Tail-f mit NSTask zu verwenden.
ich jeden Ausgang nicht sehen kann den Code mit unter:
[server setLaunchPath:@"/bin/ls"];
Wie ich die Ausgabe erfassen kann:
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);
ich die Ausgabe wie erwartet sehen kann bei der Verwendung von dieser Schwanz NSTask?
Gibt es eine Alternative zu dieser Methode, wo ich einen Stream zu Datei öffnen kann und jedes Mal, wenn eine Zeile hinzugefügt wird, es auf dem Bildschirm ausgeben? (Grund Logging-Funktionalität)
Ist es notwendig, auf jeden zu nennen 'fseek' durch die Schleife? Ist es notwendig, es aufzurufen, nachdem 'fgetc'' EOF' zurückgibt? – benzado
Funktioniert gut, ich musste es nur auf einem anderen Thread ausführen, um den Hauptthread nicht zu blockieren. Danke, dass du dir die Zeit genommen hast, um die Lösung zu schreiben. Ich schätze das wirklich! – Bach
@benzado: Streng genommen, nein. Sie können den 'ftell'-Aufruf direkt vor dem Schlafen in den Thread verschieben und dann erst nach dem Aufwachen 'fseek' aufrufen. Dieser Code ist ein wenig vereinfacht. – mipadi