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 permitida
  • ENOENT: No existe tal archivo o directorio
  • ESRCH: No existe tal proceso
  • EINTR: Llamada al sistema interrumpida
  • EIO: Error de entrada/salida
  • ENXIO: No existe tal dispositivo o dirección
  • E2BIG: Lista de argumentos demasiado larga
  • ENOMEM: Memoria insuficiente
  • EACCES: Permiso denegado
  • EFAULT: Dirección incorrecta
  • EBUSY: Recurso ocupado
  • EEXIST: El archivo ya existe
  • EXDEV: Enlace entre dispositivos
  • ENODEV: No existe tal dispositivo
  • ENOTDIR: No es un directorio
  • EISDIR: Es un directorio
  • EINVAL: Argumento inválido
  • ENFILE: Tabla de archivos del sistema llena
  • EMFILE: Demasiados archivos abiertos
  • ENOTTY: No es un dispositivo terminal
  • ETXTBSY: Archivo de texto ocupado
  • EFBIG: Archivo demasiado grande
  • ENOSPC: Sin espacio en el dispositivo
  • ESPIPE: Direccionamiento ilegal
  • EROFS: Sistema de archivos de solo lectura
  • EMLINK: Demasiados enlaces
  • EPIPE: 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 <stdio.h>
#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

  1. 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.
  2. Valor inicial: En caso de llamadas exitosas, las funciones de biblioteca normalmente no modificanerrnoel valor de. Por lo tanto, antes de verificar errores, se debe asegurar queerrnoesté establecido en 0.
  3. 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

  1. Verificar el valor de retorno: Siempre verifique el valor de retorno al llamar a funciones que pueden fallar.
  2. Establecererrnoa 0: Antes de llamar a una función, se puedeerrnoestablecer a 0, para verificar después de la llamada sierrnoha sido modificado.
  3. Usarstrerror: 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
1extern int errno
Esta es una macro establecida mediante llamadas al sistema, y algunas funciones de biblioteca en eventos de error indican qué error ocurrió.
2EDOM 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.
3ERANGE 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.
Otras extensiones