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.