C++:
Запись в стандартный поток ошибок
Как это сделать:
C++ использует cerr
для записи в stderr
. Вот пример использования:
#include <iostream>
int main() {
std::cout << "Это обычный вывод" << std::endl;
std::cerr << "Это сообщение об ошибке" << std::endl;
return 0;
}
Пример вывода может выглядеть так:
Это обычный вывод
Это сообщение об ошибке
Даже если вы перенаправите stdout
, stderr
все равно будет отображаться в терминале:
// Перенаправляем stdout в файл, но stderr все равно отображается в терминале
int main() {
freopen("output.txt", "w", stdout);
std::cout << "Это не будет показано в терминале" << std::endl;
std::cerr << "Это будет показано в терминале" << std::endl;
fclose(stdout);
return 0;
}
Глубокое погружение:
В системах, подобных UNIX, stderr
был введен для разделения вывода программы (stdout
) от сообщений об ошибках, причем каждый из них имеет свой файловый дескриптор (1 для stdout
, 2 для stderr
). Альтернативы cerr
- это использование fprintf(stderr, ...)
на языке C или непосредственная запись в файловый дескриптор 2. Внутренне, cerr
является экземпляром ostream
и не буферизуется, чтобы обеспечить немедленный вывод ошибок без ожидания заполнения буфера.