ログファイルに最後に追加した行をリアルタイムで読み込み、その行を追加する必要があります。NSTaskを使用してテール-fに似たものを得るには
Tail -fと類似しています。
私の最初の試みはNSTaskを使ってテール-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
素晴らしいです、私はちょうど主なものをブロックしないために別のスレッドでそれを実行しなければなりませんでした。解決策を書くために時間mipadiを取ってくれてありがとう。ほんとうにありがとう! – Bach
@benzado:厳密に言えば、いいえ。あなたは 'ftell'呼び出しをスレッドがスリープする直前に移動させ、その後ウェイクアップした後に' fseek'を呼び出すことができます。このコードは少し簡略化されています。 – mipadi