로그 파일에 마지막으로 추가 된 행을 실시간으로 읽고 추가 할 행을 캡처해야합니다.NSTask를 사용하여 Tail -f와 비슷한 것을 얻는 방법
테일 -f와 비슷한 것.
그래서 첫 번째 시도는 NSTask를 사용하여 Tail -f를 사용하는 것이 었습니다. 사용할 때 예상대로 출력을 볼 수 있습니다
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);
:
나는 아래의 코드를 사용하여 출력을 볼 수 없습니다
[server setLaunchPath:@"/bin/ls"];
를 내가의 출력을 캡처 할 수있는 방법 그 꼬리 NSTask?
파일로 스트림을 열고 라인을 추가 할 때마다 화면에 출력 할 수있는 방법이 있습니까? (기본 로깅 기능)
은 루프를 통과 할 때마다에'fseek' 호출 할 필요가 있습니까? 'fgetc'가'EOF'를 리턴 한 후에도 호출 할 필요가 있습니까? – benzado
위대한 작품, 난 그냥 다른 스레드에서 주요 하나를 차단하지 않아야했다. 솔루션을 작성하기 위해 시간을 가져 주셔서 감사합니다. 정말 감사! – Bach
@benzado : 엄밀히 말하면, 아니오. 쓰레드가 잠들기 직전에'ftell' 호출을 움직일 수 있고, 깨어 난 후에'fseek' 만 호출 할 수 있습니다; 이 코드는 약간 단순화되었습니다. – mipadi