Mọi lệnh gọi hệ thống không cập nhật errno
giá trị.
Do đó, bạn có thể có thêm thông tin về những gì sẽ xảy ra khi ifstream
mở không thành công bằng cách sử dụng một cái gì đó như:
cerr << "Error: " << strerror(errno);
Tuy nhiên, vì mọi lệnh gọi hệ thống đều cập nhật errno
giá trị chung, bạn có thể gặp sự cố trong ứng dụng đa luồng, nếu lệnh gọi hệ thống khác gây ra lỗi giữa việc thực thi f.open
và sử dụng errno
.
Trên hệ thống với tiêu chuẩn POSIX:
errno là luồng cục bộ; việc đặt nó trong một chuỗi không ảnh hưởng đến giá trị của nó trong bất kỳ chuỗi nào khác.
Chỉnh sửa (cảm ơn Arne Mertz và những người khác trong nhận xét):
e.what()
thoạt đầu có vẻ là một cách thực thi điều này đúng theo ngữ nghĩa hơn trong C ++, tuy nhiên chuỗi được trả về bởi hàm này phụ thuộc vào việc triển khai và (ít nhất là trong libstdc ++ của G ++) chuỗi này không có thông tin hữu ích về lý do đằng sau lỗi ...