Как отключить std :: cerr? - PullRequest
       31

Как отключить std :: cerr?

4 голосов
/ 18 августа 2011

Я получил программу, которая содержит много std::cerr, она напрямую выводит на мой терминал.Мне интересно, в чем разница между std::cerr и std::cout.И как я могу отключить std::cerr (я не хочу выводить его на мой экран)?

Ответы [ 5 ]

5 голосов
/ 18 августа 2011

Как уже упоминали другие, если это Unix-подобная система, то 2> / dev / null перенаправляет stderr (2) в большой сегмент памяти в небе (/dev/null).

Но никто здесь не объяснил, в чем разница между stderr и stdout, поэтому я чувствую себя обязанным хотя бы коснуться этой темы.

std :: cout - это стандартный поток . Это обычно, где ваша программа должна выводить сообщения.

std :: cerr - стандартная ошибка потока. Обычно используется для сообщений об ошибках.

Таким образом, если ваша программа «содержит много вывода cerr», то, возможно, стоит взглянуть на , почему печатается так много сообщений об ошибках, а не просто скрывать сообщения. Конечно, это предполагает, что у вас не просто есть программа, которая по какой-то причине выдает много ошибок, не выводимых в stderr.

0 голосов
/ 18 августа 2011

Во многих системах, включая Windows и Unix, существует два стандартных потока вывода : stdout и stderr.

Обычно программа выводит на стандартный вывод, который может отображаться на экране или перенаправляться в файл: program > output.txt или перенаправляться как ввод для другой программы program1 | program2.Например, вы можете искать в выходных данных вашей программы с помощью инструмента grep, запустив program | grep searchword.

Однако, если возникает ошибка, и вы печатаете ее на стандартный вывод, который перенаправляется, пользователь выиграл 'не вижу этого.Вот почему есть второй выход для ошибок.Также пользователь обычно не хочет, чтобы текст ошибки записывался в выходной файл или передавался в grep.

При запуске программы вы можете перенаправить вывод ее ошибки в файл с помощью program 2>file.Файл может быть / dev / null или &1, что означает перенаправление на стандартный вывод.

0 голосов
/ 18 августа 2011

Предполагается, что эта программа выполняется в системе * nix, одна из возможностей - перенаправить stderr в /dev/null.

.
0 голосов
/ 18 августа 2011

2> / dev / null добивается цели. Еще раз мне нужно составить 30 символов.

0 голосов
/ 18 августа 2011

Этот старый пост группы новостей показывает, как перенаправить . (код слишком велик для размещения здесь) .Вам необходимо использовать streambuf* rdbuf.

cerr - это объект класса ostream, представляющий стандартный поток ошибок.Он связан с потоком cstdio stderr.

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

Поскольку cerr является объектом класса ostream, мы можем записывать в него символы либо как отформатированные данные, используя, например, оператор вставки (ostream :: operator <<), либо как неформатированные данные, используя функцию-член write, среди прочего(см. ostream). </p>

...