Что такое “cerr” и “stderr”?

Каково различие между ними и как они используются? Кто-либо может указать на меня на примеры?

А именно, как Вы "пишете" в поток в обоих случаях и как Вы восстанавливаете и производите (т.е. на экран) текст, который был записан в него?

Кроме того, "экранный" вывод является самостоятельно правом потока? Возможно, я не понимаю потоки достаточно хорошо. Это может также быть сохранено в файл, конечно, я знаю. Был бы все они использовать fprintf / fscanf, и т.д.?

31
задан tshepang 26 February 2015 в 10:17
поделиться

2 ответа

cerr - это поток C ++, а stderr - дескриптор файла C, оба представляют стандартный вывод ошибок.

Вы пишете в них так же, как вы пишете в другие потоки и дескрипторы файлов:

cerr << "Urk!\n";
fprintf (stderr, "Urk!\n");

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

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

run_my_prog 2>error.out

И, да, вывод "screen" - это поток (или дескриптор файла), но это обычно только потому, что stdout / cout и stderr / cerr по умолчанию подключены к вашему «экрану». Перенаправление повлияет на это, как в следующем случае, когда на ваш экран ничего не будет записано:

run_my_prog >/dev/null 2>&1

(несмотря на такие хитрые вещи, как запись непосредственно в / dev / tty ). Этот фрагмент будет перенаправлять стандартный вывод и стандартную ошибку в битовое ведро.

42
ответ дан 27 November 2019 в 22:25
поделиться

В чем разница между ними

stderr - это ФАЙЛ * и часть стандартной библиотеки C. cerr - это поток и часть стандартной библиотеки C ++.

Кроме того, "экранный" вывод сам по себе поток, верно?

Да, это так. Но на самом деле есть два потока, которые пишут на экран по умолчанию: stdout / cout для обычного вывода и stderr / ] cerr предназначен для сообщений об ошибках. Это полезно для перенаправления: вы можете перенаправить stdout в файл, но сообщения об ошибках по-прежнему будут отображаться на экране.

7
ответ дан 27 November 2019 в 22:25
поделиться