Предоставление freopen () и stderr буфера (ограничение размера файла журнала для приложения iOS) - PullRequest
0 голосов
/ 04 мая 2011

В настоящее время я перенаправляю вывод NSLog () в файл, используя вызов freopen () из Делегата приложения. Я хотел бы ограничить размер файла журнала, но делаю это -

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

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

  }

приводит к зависанию приложения с черным экраном в бесконечном цикле. Можно ли каким-то образом установить размер буфера для stderr, а затем создать цикл, в котором я продолжаю записывать в файл, только если размер файла + размер буфера не превышает размер файла?

Ответы [ 2 ]

0 голосов
/ 04 мая 2011

Ваш код говорит:

Пока [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 в новый файл и время от времени удалять старый.

0 голосов
/ 04 мая 2011

Похоже, вы застряли в этом бесконечном цикле for.Можете ли вы этого не делать, а просто проверяйте fileSize и сбрасывайте строки, как только размер файла превышает fs?

...