2010-08-04 7 views
3

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

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

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

+1

См. Книгу [Испытательная разработка для встроенного C] (http://pragprog.com/book/jgade/test-driven-development-for-embedded-c). В нем подробно обсуждается, как решать такие проблемы. –

ответ

0

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

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

+0

Обратите внимание, что '>' (или '1>') только перенаправляет stdout. Если вы также хотите перенаправить stderr, вам также понадобится '2>' – moooeeeep

+0

@moooeeeep - Согласовано - но вы можете делать другие замечательные вещи с помощью bash. Вот почему я дал ссылку. –

+0

Вы могли бы лучше связать [эту статью] (http://tldp.org/LDP/abs/html/io-redirection.html).На этом man-странице не очень много. – moooeeeep

2

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

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

0

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

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

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

~> script appOutputlog.log 

~> ./app.exe 

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

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

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

Смежные вопросы