Articulo de referencia

errno.h

"}},"i":0}}]}"> <errno.h> es un archivo de cabecera en la biblioteca estándar del lenguaje de programación C. Define macros para informar y recuperar condiciones de error utiliz...

<errno.h> es un archivo de cabecera en la biblioteca estándar del lenguaje de programación C. Define macros para informar y recuperar condiciones de error utilizando el símboloerrno(forma abreviada de "número de error"). [ 1 ]

errnoerrnoactúa como una variable entera. Ciertas funciones de la biblioteca almacenan un valor (el número de error) cuando detectan errores. Al iniciar el programa, el valor almacenado es cero. Las funciones de la biblioteca solo almacenan valores mayores que cero. Cualquier función de la biblioteca puede modificar el valor almacenado antes de devolverlo, independientemente de si detecta errores o no. [ 2 ] La mayoría de las funciones indican que detectaron un error devolviendo un valor especial, normalmente NULL para las funciones que devuelven punteros y -1 para las funciones que devuelven enteros. Algunas funciones requieren que quien las llama las preestablezca a cero y las compruebe posteriormente para ver si se detectó un error.errno

La errnomacro se expande a un lvalue con tipo int, a veces con los especificadores de tipo externy/o volatiledependiendo de la plataforma. [ 3 ] Originalmente, esta era una ubicación de memoria estática, pero hoy en día las macros se utilizan casi siempre para permitir el procesamiento multihilo , de modo que cada hilo verá su propio número de error local .

El archivo de cabecera también define macros que se expanden a constantes enteras que representan los códigos de error. La biblioteca estándar de C solo requiere que se definan tres: [ 2 ]

Los sistemas operativos compatibles con POSIX, como AIX , Linux o Solaris, incluyen muchos otros valores de error, muchos de los cuales se utilizan con mucha más frecuencia que los anteriores, como EACCESpor ejemplo cuando no se puede abrir un archivo para su lectura. [ 5 ] C++11 define además muchos de los mismos valores que se encuentran en la especificación POSIX. [ 6 ]

Tradicionalmente, la primera página de los manuales del sistema Unix , llamada intro(2), enumera todas las macros de errno.h, pero este no es el caso con Linux , donde estas macros se enumeran en errno(3). [ 7 ]

Un error errnose puede traducir a una cadena descriptiva usando `strerror` (definido en `<string.h> `) o una extensión BSD llamada `perr` . La traducción se puede imprimir directamente en el flujo de error estándar usando `perr` (definido en `<stdio.h> `). Como en muchos sistemas tipo Unix no es seguro para subprocesos, se usa una versión segura para subprocesos , pero las definiciones conflictivas de POSIX y GNU lo hacen aún menos portable que la tabla. [ 8 ]sys_errliststrerrorstrerror_rsys_errlist

Errores POSIX

La biblioteca GNU C (GLIBC) proporciona las macros de valores de error POSIX adicionales en el archivo de cabecera <errno.h> . [ 9 ] Estas son las descripciones de las macros proporcionadas por strerror . [ 10 ]

Los nombres y significados de las macros para los códigos de error están definidos en la definición de los estándares POSIX; sin embargo, los valores numéricos NO lo están, aunque por convención los valores parecen ser los mismos en diferentes versiones de Unix. Los programas no deben depender de valores numéricos específicos y deben probar el código utilizando los nombres de macro especificados en la sección ERRORS de la página man de la función asociada. Para mejorar la legibilidad y la portabilidad del código fuente , se recomienda encarecidamente el uso de los nombres de macro estándar en el código. [ 12 ] [ 13 ]

Véase también

Referencias

  1. Norma internacional para el lenguaje de programación C (C11), ISO/IEC 9899:2011, pág. 205
  2. 1 2 Norma internacional para el lenguaje de programación C (C99), ISO/IEC 9899:1999, pág. 186
  3. "Comprobación de errores" . La biblioteca C de GNU (glibc) . Proyecto GNU. 8 de febrero de 2014. Consultado el 25 de junio de 2014 .
  4. "Una breve descripción del Anexo Normativo 1" . Consultado el 12 de septiembre de 2013 .
  5. : números de error del sistema Referencia de definiciones básicas, Especificación UNIX única , versión 5 de The Open Grouperrno.h   
  6. "Números de error - cppreference.com" . Consultado el 8 de mayo de 2015 .
  7. Stevens y Rago 2013 , pág. 14.
  8. McCabe, Colin. "El problema del terror" . www.club.cc.cmu.edu .
  9. "Códigos de error (La biblioteca C de GNU)" . www.gnu.org . 29 de marzo de 2025. Consultado el 5 de abril de 2025 .
  10. 1 2 Sistema FreeBSD: Códigos de error
  11. "Depuración: errores POSIX" . particle.io . Consultado el 5 de abril de 2025 .
  12. "Comprobación de errores" . gnu.org . Fundación del Software Libre. 26 de enero de 2025. Consultado el 6 de abril de 2025 .
  13. Pappas, Brent; Gazzillo, Paul (2024). «Análisis semántico del uso de macros para la portabilidad». Actas de la 46.ª Conferencia Internacional IEEE/ACM sobre Ingeniería de Software . págs. 1–12 . arXiv : 2401.10422 . doi : 10.1145/3597503.3623323 . ISBN  979-8-4007-0217-4.

Bibliografía

  • Stevens, W. Richard; Rago, Stephen A. (24 de mayo de 2013). Programación avanzada en el entorno UNIX (Tercera  ed.). Addison-Wesley Professional . ISBN 978-0321637734Consultado el 27 de febrero de 2015 .
  • intro(2) Manual de llamadas al sistema de FreeBSD 
  • errno(3) Manual del programador de Linux – Funciones de la biblioteca de Manned.org 
  • Manual de la biblioteca GNU C: Códigos de error
  • Listas de valores errno en Linux, tanto numéricos como simbólicos.