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 и не буферизуется, чтобы обеспечить немедленный вывод ошибок без ожидания заполнения буфера.