1

bz2 ファイルにローテーションされたログファイルの内容を読みたいと思います。できるだけ少ないメモリを使用してこれを行うにはどうすればよいですか?

4

2 に答える 2

1

これらのスクリプトを使用してそれを理解しました: http://www.cocoadev.com/index.pl?BzipValueTransformer & http://www.cocoadev.com/index.pl?NSDataPlusBzip

あなたがする必要があるのは、macports を使用してインストールしたのでlibbz2.a見つけたものを含めることです。ファイルをプロジェクトにドラッグして、コードを書きました。/opt/local/lib/libbz2.abzip2

- (void)bunzip
{
    NSString *path = @"/var/log/kernel.log.1.bz2";

    NSData *data = [NSData dataWithContentsOfFile:path];

    NSString *dataString = [[Bzip2ValueTransformer alloc] transformedValue:data];

    NSLog(@"Data: %@", dataString);
}

結果:

Dec 16 23:26:58 Paul-Peelens-MacBook-Pro kernel[0]: wlEvent: en1 en1 Link UP
Dec 16 23:26:58 Paul-Peelens-MacBook-Pro kernel[0]: AirPort: Link Up on en1
Dec 16 23:26:58 Paul-Peelens-MacBook-Pro kernel[0]: en1: BSSID changed to 32:7b:98:82:9d:7f
Dec 16 23:30:10 paul-peelens-macbook-pro newsyslog[13862]: logfile turned over due to size>1000K
于 2012-01-04T20:55:09.717 に答える
0

NSTask または独自の PRHTaskを使用して、標準入力が bzip2 ファイルに接続され、標準出力がパイプに設定されたbunzip2プロセスを開きます。NSFileHandle の非同期読み取りまたは GCD を使用dispatch_sourceして、データが入ってくるときにバックグラウンドでそのパイプから読み取ります。

于 2012-01-04T20:45:33.463 に答える