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
). Этот фрагмент перенаправит как стандартный вывод, так и стандартную ошибку, чтобы перейти к сегменту битов.