Método portable para acceder a errno en lenguajes no C

Fuentes: Portable method to access errno from non-C languages

El artículo describe una técnica técnica para acceder de forma portable al valor de errno desde lenguajes de programación que no son C, como Hare, sin recurrir a funciones wrapper escritas en C. Dado que errno es una macro no portable y las funciones estándar de la biblioteca C (libc) no devuelven su valor directamente, el autor propone un método que utiliza funciones de error estándar como perror y strerror para reconstruir el número de error.

La solución se basa en redirigir el descriptor de archivo de error estándar (STDERR_FILENO) a un archivo temporal durante la inicialización del programa. Cuando ocurre un error, se llama a perror para escribir la cadena de error en este archivo, y luego se lee la cadena devuelta para identificar el número de error mediante una tabla de mapeo pregenerada. Este enfoque evita depender de detalles de implementación específicos de libc, como los nombres de símbolos internos, lo que garantiza la portabilidad entre sistemas operativos POSIX.

El texto aborda también la complejidad de las funciones strerror_r, que varían entre GNU libc y otras implementaciones POSIX, y resuelve un problema adicional relacionado con la constante SEEK_SET, cuyo valor es definido por la implementación. Se propone un bucle de verificación para determinar el valor correcto de SEEK_SET sin depender de suposiciones. Esta técnica es útil para desarrolladores que necesitan manejar errores en sistemas operativos genéricos o en lenguajes de programación que no ofrecen acceso directo a los códigos de error del sistema.