Biblioteca estándar de C -<errno.h>
Introducción
De la biblioteca estándar de Cerrno.hel archivo de cabecera define variables enteraserrno, que se establece mediante llamadas al sistema, y algunas funciones de biblioteca en eventos de error indican qué error ocurrió. Esta macro se expande a un lvalue modificable de tipo int, por lo que puede ser leída y modificada por un programa.
<errno.h>Es un archivo de cabecera de la biblioteca estándar de C que proporciona un mecanismo para informar y manejar errores en los programas. Este archivo de cabecera define macros y variables para indicar y describir los tipos de errores en tiempo de ejecución.
errno.hEl archivo de cabecera define una serie de macros que representan diferentes códigos de error. Estas macros deben expandirse a un tipointde expresión constante entera.
errnoEs una variable global utilizada para almacenar el código de error más reciente. El tipo de esta variable esint. Cuando una función de biblioteca encuentra un error, normalmente estableceerrnopara indicar el tipo de error.
Por ejemplo, en operaciones de archivos, sifopenla función falla porque el archivo no existe, estableceráerrnoaENOENT。
Códigos de error comunes
A continuación se presentan algunos códigos de error comunes que en<errno.h>se definen como macros:
EPERM: Operación no permitidaENOENT: No existe tal archivo o directorioESRCH: No existe tal procesoEINTR: Llamada al sistema interrumpidaEIO: Error de entrada/salidaENXIO: No existe tal dispositivo o direcciónE2BIG: Lista de argumentos demasiado largaENOMEM: Memoria insuficienteEACCES: Permiso denegadoEFAULT: Dirección incorrectaEBUSY: Recurso ocupadoEEXIST: El archivo ya existeEXDEV: Enlace entre dispositivosENODEV: No existe tal dispositivoENOTDIR: No es un directorioEISDIR: Es un directorioEINVAL: Argumento inválidoENFILE: Tabla de archivos del sistema llenaEMFILE: Demasiados archivos abiertosENOTTY: No es un dispositivo terminalETXTBSY: Archivo de texto ocupadoEFBIG: Archivo demasiado grandeENOSPC: Sin espacio en el dispositivoESPIPE: Direccionamiento ilegalEROFS: Sistema de archivos de solo lecturaEMLINK: Demasiados enlacesEPIPE: Tubería rota
Ejemplo de uso
A continuación se muestra un ejemplo sencillo del uso de errno que demuestra cómo manejar los errores de apertura de archivos:
Ejemplo
#include <errno.h>
#include <string.h>
int main() {
FILE *file = fopen("nonexistent_file.txt", "r");
if (file == NULL) {
printf("Error opening file: %s\n", strerror(errno));
return 1;
}
// Código de manejo de archivos
fclose(file);
return 0;
}
En este ejemplo, sifopenla función falla,errnose establecerá al código de error correspondiente.strerrorLa función se utiliza para convertirerrnoen un mensaje de error legible por humanos.
Consideraciones
- Seguridad de hilos: En programas multihilo,
errnogeneralmente se implementa como almacenamiento local de hilo (Thread-Local Storage, TLS), para garantizar que cada hilo tenga un código de error independiente. - Valor inicial: En caso de llamadas exitosas, las funciones de biblioteca normalmente no modifican
errnoel valor de. Por lo tanto, antes de verificar errores, se debe asegurar queerrnoesté establecido en 0. - Rango de códigos de error: Diferentes sistemas operativos e implementaciones de la biblioteca estándar de C pueden definir códigos de error adicionales. Los programas deben evitar depender de los valores numéricos de códigos de error específicos.
Recomendaciones para el manejo de errores
- Verificar el valor de retorno: Siempre verifique el valor de retorno al llamar a funciones que pueden fallar.
- Establecer
errnoa 0: Antes de llamar a una función, se puedeerrnoestablecer a 0, para verificar después de la llamada sierrnoha sido modificado. - Usar
strerror: Mediantestrerrorva aerrnoconvertir a una cadena legible, facilitando la depuración y el registro.
En resumen,<errno.h>proporciona una forma estandarizada de informar y manejar errores en los programas, haciendo que el código de manejo de errores sea más consistente y mantenible.
Macros de la biblioteca
A continuación se enumeran las macros definidas en el archivo de cabecera errno.h:
| N.º | Macro y descripción |
|---|---|
| 1 | extern int errno Esta es una macro establecida mediante llamadas al sistema, y algunas funciones de biblioteca en eventos de error indican qué error ocurrió. |
| 2 | EDOM Domain Error Esta macro representa un error de dominio, que ocurre cuando el argumento de entrada está fuera del dominio definido por la función matemática; errno se establece a EDOM. |
| 3 | ERANGE Range Error Esta macro representa un error de rango, que ocurre cuando el argumento de entrada está fuera del rango definido por la función matemática; errno se establece a ERANGE. |