2011-10-26 6 views
8

Tôi không thể hiểu thư viện errno trong C++ là gì? Loại lỗi nào được đặt trong đó và làm cách nào để biết số nào là viết tắt của lỗi nào?Làm cách nào để sử dụng errno trong C++

Điều đó có ảnh hưởng đến việc thực thi chương trình không?

+0

Lấy bất kỳ trang hướng dẫn nào và xem phần 'Lỗi', ví dụ: http://linux.die.net/man/3/open. Tất cả các 'E *' macro là các giá trị 'errno' sẽ chứa khi có lỗi. – wormsparty

Trả lời

9

errno.h là một phần của tập con C của C++. Nó được sử dụng bởi thư viện C và chứa các mã lỗi. Nếu một cuộc gọi đến một chức năng không thành công, biến "errno" được đặt tương ứng với lỗi.

Nó sẽ không thể sử dụng nếu bạn đang sử dụng thư viện chuẩn C++.

Trong C, bạn có các chức năng dịch mã không chính xác thành chuỗi C.

Ví dụ trong C nó hoạt động như thế này:

int result = call_To_C_Library_Function_That_Fails(); 

if(result != 0) 
{ 
    char buffer[ 256 ]; 
    char * errorMessage = strerror_r(errno, buffer, 256); // get string message from errno 

    // ... 
} 

Bạn có thể cần nó dĩ nhiên trong C++ khi bạn đang sử dụng các thư viện C hoặc thư viện OS của bạn mà là trong C. Ví dụ, nếu bạn đang sử dụng API sys/socket.h trong các hệ thống Unix.

Với C++, nếu bạn đang thực hiện trình bao bọc xung quanh cuộc gọi C API, bạn có thể sử dụng ngoại lệ C++ của riêng mình sẽ sử dụng errno.h để nhận thông báo tương ứng từ mã lỗi cuộc gọi API C của bạn.

+0

hoạt động trên cửa sổ ... vì tôi tìm thấy trên web mà nó hoạt động chỉ trên unix –

+1

@CAD_coding xem tại đây: http://msdn.microsoft.com/en-us/library/zc53h9bh.aspx –

+1

Hầu như chính xác, nhưng nhiều hàm chỉ trả về giá trị đơn (chẳng hạn như '-1') về lỗi và đặt' errno' thành mã lỗi thực tế. Vì vậy, bạn muốn 'strerror_r (errno, ...)' thay vì 'strerror_r (errorCode, ...)'. 'errno' là một biến toàn cục giả. –