Cómo convertir errno en UNIX a la cadena correspondiente?


¿Hay alguna función en UNIX que convierta errno a su cadena correspondiente para, por ejemplo, EIDRM a "EIDRM"? Es muy molesto depurar para comprobar si hay errores con estos errnos enteros.

 35
Author: avd, 2009-10-10

5 answers

strerror() debería hacerlo. http://linux.die.net/man/3/strerror

Para su información, para que pueda encontrar estas cosas más fácilmente, usted mismo: Si escribe man errno (o cualquier función que esté investigando), y mira al final de la página de manual, verá una lista de funciones relacionadas. Si man cada uno de ellos (teniendo una conjetura sobre cuál(s) hacer primero basado en sus nombres) a menudo encontrará la respuesta a preguntas similares.

 67
Author: atk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-10 02:45:55

Otra solución que resuelve exactamente el problema que tienes, pero en Python en lugar de C:

>>> import errno
>>> errno.errorcode[errno.EIDRM]
'EIDRM'
 10
Author: Andrey Vlasovskikh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-10 02:58:15

Ahora hay una utilidad errno distribuida con el paquete moreutils.

 5
Author: Stephen Niedzielski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-25 01:10:16

No estoy seguro de estos nombres de estilo enum, pero para fines de depuración y notificación de errores puede usar perror(3) o strerror(3) C funciones que devuelven una representación legible por humanos del código de error. Por favor refiérase a las páginas de manual para más detalles.

 4
Author: Andrey Vlasovskikh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-10 02:50:23

Si realmente desea EIDRM y no su cadena de error: no. Sin embargo, en OpenBSD,

man errno|egrep ' [0-9]+ E[A-Z]+'|sed 's/^ *//'|cut -d' ' -f1,2

Imprime una bonita tabla de "...\n89 EIDM\n..."que se puede convertir aún más en una estructura de datos para el lenguaje de programación que le gustaría tener esta función en.

 3
Author: ayrnieu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-10 16:05:36