2017-01-29 3 views
0

Для iPhone-приложения мне нужно собрать отладочные данные в файл, который будет отправлен в онлайн-службу для анализа. Это отлично работает, отвлекая вывод stderr на дескриптор файла и при необходимости отправляя файл. (NSLog выход также заканчивается в stderr, поэтому это работает по всем направлениям.) Тот же метод также отлично работает с stdout.Swift stderr и stout в один файл

Вот как я делаю сохранение в файл:

freopen(cStringFilePath, "a+", stderr) // or stdout 

выше правильно возвращает UnsafeMutablePointer<FILE>, который я храню след, чтобы закрыть файл, когда это необходимо.

Однако, я должен был бы содержание обоих stdout и stderr в один файл, с правильной линией временной последовательности по линии.

Причина в том, что я пытаюсь отладить стороннюю структуру, которая производит диагностический вывод, но записывает ее в stdout, а не в stderr.

Любая идея, как это сделать?

ответ

2

Вы пробовали просто позвонить freopen дважды? Однажды с stderr и один раз с stdout? Я думаю, что это было хорошо для моих целей, когда я попробовал.

+0

Нет, кажется, он захватит только тот, который вы использовали последним. – Mundi

+0

Исправление. Кажется, это работает. Вау. Но это безопасно? Что делать, если два потока пытаются получить доступ к файлу в одно и то же время? – Mundi

+0

Да, это должно быть «безопасно», т. Е. Оно не должно терпеть крах, но вы можете получить выходной чередованный из-за правил буферизации. Я думаю, вы можете изменить, как буферизация происходит в этих файловых дескрипторах, но я не уверен, как с головы. –