0

現在、App Delegate からの freopen() の呼び出しを使用して、NSLog() 出力をファイルにリダイレクトしています。ログファイルのサイズを制限したいのですが、これを行うと-

  unsigned long long fs = 3000;
  while ([fileAttributes fileSize] < fs) {

    freopen([FILEPATH cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);

  }

無限ループでアプリが黒い画面で動かなくなる原因となります。stderr のバッファ サイズを設定し、ファイル サイズ + バッファ サイズがファイル サイズを超えない場合にのみファイルへの書き込みを続行するループを作成する方法はありますか?

4

2 に答える 2

0

あなたのコードは言う:

[fielAttributes fileSize] が fs 未満である限り、freopen(...) を呼び出し続けます。

それは本当にあなたが望むものですか?私はあなたが次のようなものを好むかもしれないと思います:

if ([fileAttributes fileSize] < fs) {
    file = freopen([FILEPATH cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
}
fwrite(file, "something to log");
fclose(file);

もちろん、それも素晴らしいことではありません。なぜなら、fs 文字のログ情報を書き込んでから停止するからです。代わりに、おそらく LAST fs 文字を保持したいようです。その場合、実用的なアプローチは、最後の fs 文字を新しいファイルに単純にコピーし、古いファイルを時々削除することです。

于 2011-05-03T21:41:28.290 に答える
0

無限の for ループに陥っているようです。それはできませんが、ファイル サイズが fs よりも大きくなったら、fileSize とダンプ文字列をチェックするだけですか?

于 2011-05-03T21:32:25.990 に答える