Подтвердить что ты не робот

Что такое "cerr" и "stderr"?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

run_my_prog 2>error.out

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

run_my_prog >/dev/null 2>&1

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

Ответ 2

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

stderr - это FILE* и часть стандартной библиотеки C. cerr - это ostream и часть стандартной библиотеки С++.

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

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