2009-10-10 7 views

Respuesta

62

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

FYI, para que pueda encontrar estas cosas más fácilmente, usted mismo: si escribe man errno (o la función que esté investigando), y mira la parte inferior de la página de manual, verá una lista de funciones relacionadas. Si man cada uno de ellos (adivinando cuál (es) primero hacer según sus nombres) a menudo encontrará la respuesta a preguntas similares.

+1

strerror en realidad los convertirá en cadenas mucho más útiles que solo "EIDRM" como se solicitó, pero esa es la respuesta que yo también habría dado. –

+1

esas cadenas en realidad no son tan útiles, porque las páginas man para las llamadas al sistema a menudo especifican comportamientos de error en términos del código enum. La cadena es, en el mejor de los casos, una pista. – orm

+0

¡Peligro, Will Robinson! Las cadenas de 'strerror()' están _localised_, como descubrí cuando estaba revisando una cadena de error para "No existe tal archivo o directorio" pero la plataforma de mi usuario devolvió "Arquivo ou diretório encontrado en su lugar". (Esto fue en un lenguaje donde el valor de errno en sí mismo no estaba expuesto.) –

4

no estoy seguro acerca de tales enum nombres al estilo, pero para fines de depuración y de informes de error que puede utilizar perror(3) o strerror(3) funciones C que devuelven una representación legible del código de error. Por favor, consulte las páginas man para más detalles.

+0

Pensé que perror() simplemente imprime en STDERR en lugar de convertir el número a un valor. ¿Recuerdo mal (y leí mal la página man)? – atk

+0

Sí, 'perror' es un recurso de depuración para problemas relacionados con' errno' y escribe sus mensajes en 'STDERR'. –

10

Sólo otra solución que resuelve exactamente el problema que tiene, pero en Python en lugar de C:

>>> import errno 
>>> errno.errorcode[errno.EIDRM] 
'EIDRM' 
3

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 mesa de "... \ n89 eIDM \ n ..." que se puede convertir además en una estructura de datos para el lenguaje de programación que desea tener esta función en.

5

Ahora hay una utilidad errno distribuida con el paquete moreutils.