2011-10-26 22 views
8

No puedo entender para qué sirve la biblioteca errno en C++? ¿Qué tipo de errores se establecen en él y cómo sé qué número representa qué error?¿Cómo uso errno en C++

¿Afecta la ejecución del programa?

+0

Tome cualquier página man y mire la sección 'Errores', p. Ej. http://linux.die.net/man/3/open. Todas las macros 'E *' son valores 'errno' contendrán al error. – wormsparty

Respuesta

9

errno.h es parte del subconjunto C de C++. Lo usa la biblioteca C y contiene códigos de error. Si falla una llamada a una función, la variable "errno" se configura de manera correspondiente al error.

No servirá de nada si usa la biblioteca estándar de C++.

En C tiene funciones que traducen códigos errno a C-strings.

Por ejemplo, en C funciona así:

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 

    // ... 
} 

puede necesitarla, por supuesto, en C++ cuando se está utilizando la biblioteca de C o la biblioteca de sistema operativo que está en C. Por ejemplo, si está usando la API sys/socket.h en sistemas Unix.

Con C++, si está creando un contenedor alrededor de una llamada a la API C, puede usar sus propias excepciones C++ que utilizarán errno.h para obtener el mensaje correspondiente de los códigos de error de la llamada C API.

+0

funciona esto en Windows ... porque encontré en la web que funciona solo en Unix –

+1

@CAD_coding ver aquí: http://msdn.microsoft.com/en-us/library/zc53h9bh.aspx –

+1

Casi correcto, pero muchas funciones simplemente devuelven s un solo valor (como '-1') en caso de error y configuran' errno' en el código de error real. Entonces querrías 'strerror_r (errno, ...)' en lugar de 'strerror_r (errorCode, ...)'. 'errno' en sí mismo es una extraña variable pseudo-global. –