Сначала немного справочной информации:
По умолчанию обычная Unix-программа запускается с двумя файловыми дескрипторами: StdOut и StdErr.
StdOut осуществляется через дескриптор файла № 1.
StdErr выполняется через дескриптор файла № 2.
Перенаправление стандартного выхода осуществляется через 1>
. Пример ./App 1> my_log.txt
Перенаправление стандартной ошибки осуществляется через 2>
. Пример ./App 2> my_errors.txt
(>
и 1>
одинаковы. Одно это просто более короткое обозначение)
Это позволяет использовать полезные вещи, такие как только регистрация ошибок или запись нормального вывода в один файл, а ошибки - в другой файл. Или очень полезный случай записи нормального вывода в файл и получения ошибок на вашем экране.
Замена./ Имя приложения с полным путем к файлу не будет иметь никакого значения. Один запускает приложение из текущего каталога, второй указывает полный путь к приложению. Ни один из них не влияет на дескрипторы файлов.
Теперь мы наконец добрались до ответа на ваш вопрос:
Что вы хотите сделать, чтобы записать вывод из NSlog(). Для этого вы сначала узнаете, куда пишет nslog.
В соответствии с этим вопрос на нашем сестринском сайте StackOverflow NSLog выводит в ASL (версия syslog от Apple) и в консоль.
Таким образом, вы либо хотите прочитать вывод из системного журнала, либо изменить вывод из журнала на место, где вы можете легко его перехватить. Например, с freopen([path cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
Несколько методов о том, как это сделать, даны в посте [так], на который я ссылаюсь. Если вы добавите более подробную информацию в свой пост (например, разрешено ли изменение приложения?) тогда я могу ответить более подробно.