Запись в стандартный поток ошибок

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

Смотрите также: