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

看起来你被困在那个无限的 for 循环中。您可以不这样做,而只需检查文件大小并在文件大小大于 fs 时转储字符串吗?

于 2011-05-03T21:32:25.990 回答
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 回答