Macro de la biblioteca C -errno

C 标准库 - <errno.h>Biblioteca estándar de C - <errno.h>

Descripción

Macro de la biblioteca Cextern int errnose establece mediante llamadas al sistema, y algunas funciones de biblioteca, en caso de error, indican qué error ocurrió.

errnoEs una macro de la biblioteca estándar de C, definida en<errno.h>el archivo de cabecera. Se utiliza para indicar los errores que ocurren durante la ejecución del programa.errnoEn realidad es una variable entera que almacena el código de error. Cuando ocurre un error, las funciones de biblioteca establecenerrnoal código de error apropiado para que el programa pueda comprobar y manejar estos errores.

Declaración

La siguiente es la declaración de la macro errno.

extern int errno

Parámetros

  • NA

Valor de retorno

  • NA

UsoerrnoPasos

  1. Incluir el archivo de cabecera: antes de usarerrnoes necesario incluir el<errno.h>archivo de cabecera.
  2. Llamar a la función: llame a funciones que pueden establecererrnoerrno.
  3. Comprobarerrno: cuando la función devuelve un error, compruebeerrnopara obtener el tipo de error.
  4. Manejar el error: segúnerrnoel valor, tome las medidas adecuadas de manejo de errores.

Ejemplo

El siguiente ejemplo demuestra el uso de la macro errno.

Ejemplo

#include <stdio.h> #include <errno.h> #include <string.h> extern int errno ; int main () { FILE *fp; fp = fopen("file.txt", "r"); if( fp == NULL ) { fprintf(stderr, "Value of errno: %d\n", errno); fprintf(stderr, "Error opening file: %s\n", strerror(errno)); } else { fclose(fp); } return(0); }

Compilemos y ejecutemos el programa anterior, cuando el archivofile.txtno exista, se producirá el siguiente resultado:

Value of errno: 2
Error opening file: No such file or directory

ComuneserrnoValor

  • EPERM: Operación no permitida
  • ENOENT: No existe el archivo o directorio
  • ESRCH: No existe el proceso
  • EINTR: Llamada al sistema interrumpida
  • EIO: Error de entrada/salida
  • ENXIO: No existe el dispositivo o la 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 el 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 de 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

Precauciones

  1. Seguridad de hilos: En entornos de subprocesos múltiples,errnogeneralmente se implementa como almacenamiento local de hilos (Thread-Local Storage, TLS), lo que garantiza que cada hilo tenga unerrnovalor.
  2. Valor inicial: Cuando una llamada a función tiene éxito,errnogeneralmente no se modifica. Por lo tanto, antes de manejar errores, asegúrese de queerrnose establezca en 0.
  3. Diferencias entre plataformas: Diferentes sistemas operativos e implementaciones de la biblioteca estándar de C pueden definir códigos de error adicionales. El programa debe evitar depender del valor numérico de códigos de error específicos.

Sugerencias para el manejo de errores

  1. Comprobar el valor de retorno: Siempre compruebe el valor de retorno al llamar a funciones que pueden fallar.
  2. Establecererrnoen 0: Antes de llamar a una función, puede establecererrnoen 0, para comprobar después de la llamada sierrnoha sido modificado.
  3. Usarstrerroryperror:strerrorla función para convertirerrnoen una cadena de mensaje de error legible;perrorla función imprime elerrnovalor con un mensaje de error descriptivo.

Manejo detallado de errores

A continuación se muestra un ejemplo más detallado que demuestra cómo manejar diferenteserrnovalores:

Ejemplo

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *file = fopen("nonexistent_file.txt", "r");
    if (file == NULL) {
        switch (errno) {
            case EACCES:
                printf("Error: Permission denied\n");
                break;
            case ENOENT:
                printf("Error: No such file or directory\n");
                break;
            default:
                printf("Error opening file: %s\n", strerror(errno));
        }
        return 1;
    }

    // Código de manejo de archivos
    fclose(file);
    return 0;
}

En este ejemplo, comprobamos los valores específicos deerrnoy realizamos el manejo correspondiente. SierrnoSíEACCES(permiso denegado) oENOENT(no existe el archivo o directorio), imprimimos un mensaje de error específico; de lo contrario, imprimimos un mensaje de error genérico.

<errno.h>Proporciona una forma estandarizada de informar y manejar errores en el programa, haciendo que el código de manejo de errores sea más consistente y mantenible.

C 标准库 - <errno.h>Biblioteca estándar de C - <errno.h>

Otras extensiones