Как отловить весь выводимый текст в c - PullRequest
3 голосов
/ 04 августа 2010

Это моя проблема. Я работаю над классом модульного тестирования для проекта в C. Класс модульного тестирования прекрасно работает, но один из его методов вызывает метод из API для взаимодействия с частью аппаратного обеспечения. из-за закрытого программного обеспечения аппаратного обеспечения я действительно не могу позволить ему работать, пока я выполняю свои тесты, и мне это не нужно из-за природы «черного ящика» тестов.

Эти вызовы являются просто символьными * сообщениями, отправляемыми на аппаратное обеспечение, и при выполнении моего теста я просто получаю много распечаток «Не удалось связаться с API». я предполагаю, что это своего рода проверка ошибок со стороны API.

У меня такой вопрос, ради красивого вывода, есть ли в любом случае перехват, подавление или проверка всего текста, поступающего на терминал в этом случае. (Это поток вывода правильно?

Ответы [ 3 ]

2 голосов
/ 15 июня 2012

Вы также можете посмотреть на вызов freopen() на stdout (или stderr), если вы ссылаетесь в коде, который генерирует эти сообщения. К сожалению, вы перенаправите весь вывод программы.

Может быть возможно сохранить дескриптор исходного stdout, создать канал, вызвать freopen(), чтобы перенаправить stdout на одну сторону канала, и получить поток, считываемый с другой стороны, фильтрующий выходные данные и передавая их хорошие сообщения до первоначального стандартного вывода.

0 голосов
/ 15 июня 2012

Если я правильно понимаю ваш вопрос, при условии, что вы запускаете свое приложение из какой-либо оболочки (bash или иным образом) и видите, что printf идет в приглашение оболочки.И вы хотели бы сохранить их в файл.

Ну, самый простой способ сделать это с помощью команды script.

Вы делаете следующее.

 ~> script appOutputlog.log

 ~> ./app.exe 

Как только вы закончите, либо потому, что приложение завершено, либо вы закончили запись своего журнала.Вы можете использовать Ctrl + D или Ctrl + C для выхода из команды сценария.И у вас будет файл appOutputlog.log в локальном каталоге со всеми журналами, которые были напечатаны в командной строке в оболочке.

2 другим решением является использование fopen, за которым следует fprintf вместо обычных printf с.

3 Другое решение - подключить ваш процесс к syslogd, работающему в вашей системе.Это один из самых стандартных и производственных способов сбора бревен.syslogd - это системный процесс-демон, предназначенный исключительно для записи журналов различных процессов.

0 голосов
/ 15 июня 2012

Я предполагаю, что вы запускаете программу из оболочки, в этом случае используйте >, чтобы отправить вывод в файл. См. страницу руководства bash

В противном случае мне понадобится немного больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...