C++:
Ghi vào lỗi chuẩn

Làm thế nào:

C++ sử dụng cerr để ghi vào stderr. Dưới đây là cách sử dụng:

#include <iostream>

int main() {
    std::cout << "Đây là đầu ra thường" << std::endl;
    std::cerr << "Đây là thông báo lỗi" << std::endl;
    return 0;
}

Đầu ra mẫu có thể trông như thế này:

Đây là đầu ra thường
Đây là thông báo lỗi

Ngay cả khi bạn chuyển hướng stdout, stderr vẫn hiển thị trong terminal:

// Chuyển hướng stdout sang một tệp, nhưng stderr vẫn hiển thị trong terminal
int main() {
    freopen("output.txt", "w", stdout);
    std::cout << "Điều này không hiển thị trên terminal" << std::endl;
    std::cerr << "Điều này sẽ hiển thị trong terminal" << std::endl;
    fclose(stdout);
    return 0;
}

Sâu hơn:

Trong các hệ thống giống UNIX, stderr được giới thiệu để tách đầu ra của chương trình (stdout) khỏi các thông báo lỗi, với mỗi thứ có mã số định danh tệp riêng biệt của mình (1 cho stdout, 2 cho stderr). Các phương pháp thay thế cho cerr là sử dụng fprintf(stderr, ...) trong C hoặc ghi trực tiếp vào mã số định danh tệp 2. Bên trong, cerr là một thể hiện của ostream và không được đệm để đảm bảo đầu ra lỗi ngay lập tức mà không chờ đợi bộ đệm đầy.

Xem thêm: