Каково различие между ними и как они используются? Кто-либо может указать на меня на примеры?
А именно, как Вы "пишете" в поток в обоих случаях и как Вы восстанавливаете и производите (т.е. на экран) текст, который был записан в него?
Кроме того, "экранный" вывод является самостоятельно правом потока? Возможно, я не понимаю потоки достаточно хорошо. Это может также быть сохранено в файл, конечно, я знаю. Был бы все они использовать fprintf
/ fscanf
, и т.д.?
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
). Этот фрагмент будет перенаправлять стандартный вывод и стандартную ошибку в битовое ведро.
В чем разница между ними
stderr
- это ФАЙЛ *
и часть стандартной библиотеки C. cerr
- это поток
и часть стандартной библиотеки C ++.
Кроме того, "экранный" вывод сам по себе поток, верно?
Да, это так. Но на самом деле есть два потока, которые пишут на экран по умолчанию: stdout
/ cout
для обычного вывода и stderr
/ ] cerr
предназначен для сообщений об ошибках. Это полезно для перенаправления: вы можете перенаправить stdout
в файл, но сообщения об ошибках по-прежнему будут отображаться на экране.