2010-07-21 9 views
5

¿Hay algún enlace o material donde pueda obtener más información acerca de los diferentes números de error en Linux?En cuanto a los números de error en Linux

En la actualidad en el hombre errno consigo una sola línea para cada número de error pero me gustaría saber las condiciones o posibilidades de las que se produce en particular error (Una descripción más detallada en palabras cortas)

Por ejemplo,

EADDRNOTAVAIL 99 /* Cannot assign requested address */ 

Por encima de error se produce cuando una toma trató de obligar a dirección IP que no está presente de forma local en la máquina .. Del mismo modo para todos los demás errores ¿hay alguna wiki o material para obtener información detallada ??

Respuesta

3

Los códigos de error son bastante genéricos y solo tienen sentido dentro del contexto de una función en particular. Por lo tanto, no hay mucha ventaja en el aprendizaje de todos los códigos de error, ya que pueden significar cosas sutilmente diferentes para diferentes funciones y, de todos modos, deben manejarse de forma diferente.

La sección "ERRORES" en la página de manual de la función le dirá qué códigos son posibles para sus valores de retorno o errno y por qué ocurren.

+0

Sí estoy de acuerdo con usted ... Pero Alex la sección de errores en cada página hombre todavía tiene la misma línea única. .. :( – codingfreak

+0

@codingfreak Muchos de ellos pueden ser iguales, pero no necesariamente. Por ejemplo, 'EPERM' es diferente para' man 2 open' y 'man 2 pthread_create' y debe manejarse de manera diferente. –

0

Its API specfic. No he escuchado sobre una lista de errores genérica. Sin embargo:

Many functions provide an error number in errno, which has type int 
and is defined in <errno.h>. 

para que pueda tener una mirada en el archivo de cabecera errno.h. Similarmente Glib tiene diferentes códigos para reportar errores.

EDIT: Bueno, si ya conoce el código de error, siempre puede google para obtener más información sobre ese error, si encuentra la página de manual insatisfactoria.

+0

Pero estoy más interesado en el error especificado en man errno no específico de una aplicación de terceros ... como glib – codingfreak

+0

@codingfreak: Puede ver el enlace para el archivo errno.h. –

0

Si se trata de GLIBC, trate de usar %m en un comunicado printf():

#include <errno.h> 
... 
int fh = fopen(...); 
if (0 > fh) printf("Couldn't open the file: %d, %m\n", errno); 

Muy útil.

+0

Detallar todas las ubicaciones de los códigos de error de origen sería una tarea de fecha enorme y continuamente desactualizada: ¿está escribiendo su propio controlador y quiere asegurarse de elegir los códigos de error correctos? – Jamie

9

Bueno, dado que los errores suelen ocurrir al hacer algo, lo mejor es buscar en la página de man "algo".

Por ejemplo, si recibe de vuelta un errno de 34 a partir de su llamada fscanf(), primero haces:

grep 34 $(find /usr/include -name '*errno*h') 

de averiguar cuál era el error:

/usr/include/bits/errno.h:#define ERANGE 34 /* Math result not representable. */ 
/usr/include/asm-generic/errno-base.h:#define ERANGE 34 /* Math result not ... */ 

Entonces, mirando en la página man para fscanf(), ves:

ERANGE - The result of an integer conversion would exceed the size 
     that can be stored in the corresponding integer type. 

y usted (con suerte) será capaz de resolverlo desde allí.

Si desea una lista de los errores y (breve), modificar el grep por encima de la siguiente manera:

grep define $(find /usr/include -name '*errno*h') | less 

y navegar por la salida.

Y, si aún no sabe sobre el error y qué lo causó (las descripciones son un tanto escuetas, estaré de acuerdo), simplemente lo tacle (por ejemplo, EADDRNOTAVAIL) en ese pequeño cuadro de diálogo en la esquina superior derecha de su navegador y que pondremos en algo así como this (o muchas otras páginas maravillosas):

no puede asignar solicitada dirección de
está intentando bind(2) a una dirección local eso no es local Por ejemplo, si las direcciones IP de una máquina son 127.0.0.1 y 1.2.3.4 y está intentando vincularse al 1.2.3.5, obtendrá este error. Verifique que la dirección a la que intenta vincular exista en la máquina a la que intenta vincularla.
Este error también puede aparecer si está haciendo una "conexión pre-enlazada", en la que primero se vincula a un puerto local, luego se realiza una conexión saliente con un socket. Si el puerto local ya está conectado a la dirección IP y al puerto (es decir, ya existe un par de socket idéntico), recibirá este error (valor = 99 en Linux).
4 páginas enlazan a EADDRNOTAVAIL:
         -  bind (2)
         -  de conexión (2)
         -  setsockopt (2)
          -   de paquetes (7)

Vaya por delante, intentarlo con otros valores de error, así, no es demasiado malo.


Usted está usando Firefox, ¿verdad? :-)

+0

Firefox es !! Buena explicación por cierto. –

+0

gracias por la buena explicación :) – codingfreak

0

Como han sugerido otros carteles, la mejor fuente para decodificar lo que los errores realmente significan en contexto es la página de manual adecuada. Para los protocolos de red, la página de manual adecuada puede ser distinta de la llamada al sistema; para sockets IP, intente ip (7), lo que da un poquito más información:

EADDRNOTAVAIL 
      A nonexistent interface was requested or the requested source 
      address was not local. 

Más códigos de error se describen en TCP (7) y UDP (7).

+0

Gracias por la entrada – codingfreak

0

este programa también puede hacer el truco ..

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

int main() 
{ 
     int i= 0 ; 

     for (i = 0 ; i<=132; i++) 
     { 
       printf("no %d == %s \n", i , strerror(i)); 
     } 
} 
no 0 == Success 
no 1 == Operation not permitted 
no 2 == No such file or directory 
no 3 == No such process 
no 4 == Interrupted system call 
no 5 == Input/output error 
no 6 == No such device or address 
no 7 == Argument list too long 
no 8 == Exec format error 
no 9 == Bad file descriptor 
no 10 == No child processes 
no 11 == Resource temporarily unavailable 
no 12 == Cannot allocate memory 
no 13 == Permission denied 
no 14 == Bad address 
no 15 == Block device required 
no 16 == Device or resource busy 
no 17 == File exists 
no 18 == Invalid cross-device link 
no 19 == No such device 
no 20 == Not a directory 
no 21 == Is a directory 
no 22 == Invalid argument 
no 23 == Too many open files in system 
no 24 == Too many open files 
no 25 == Inappropriate ioctl for device 
no 26 == Text file busy 
no 27 == File too large 
no 28 == No space left on device 
no 29 == Illegal seek 
no 30 == Read-only file system 
no 31 == Too many links 
no 32 == Broken pipe 
no 33 == Numerical argument out of domain 
no 34 == Numerical result out of range 
no 35 == Resource deadlock avoided 
no 36 == File name too long 
no 37 == No locks available 
no 38 == Function not implemented 
no 39 == Directory not empty 
no 40 == Too many levels of symbolic links 
no 41 == Unknown error 41 
no 42 == No message of desired type 
no 43 == Identifier removed 
no 44 == Channel number out of range 
no 45 == Level 2 not synchronized 
no 46 == Level 3 halted 
no 47 == Level 3 reset 
no 48 == Link number out of range 
no 49 == Protocol driver not attached 
no 50 == No CSI structure available 
no 51 == Level 2 halted 
no 52 == Invalid exchange 
no 53 == Invalid request descriptor 
no 54 == Exchange full 
no 55 == No anode 
no 56 == Invalid request code 
no 57 == Invalid slot 
no 58 == Unknown error 58 
no 59 == Bad font file format 
no 60 == Device not a stream 
no 61 == No data available 
no 62 == Timer expired 
no 63 == Out of streams resources 
no 64 == Machine is not on the network 
no 65 == Package not installed 
no 66 == Object is remote 
no 67 == Link has been severed 
no 68 == Advertise error 
no 69 == Srmount error 
no 70 == Communication error on send 
no 71 == Protocol error 
no 72 == Multihop attempted 
no 73 == RFS specific error 
no 74 == Bad message 
no 75 == Value too large for defined data type 
no 76 == Name not unique on network 
no 77 == File descriptor in bad state 
no 78 == Remote address changed 
no 79 == Can not access a needed shared library 
no 80 == Accessing a corrupted shared library 
no 81 == .lib section in a.out corrupted 
no 82 == Attempting to link in too many shared libraries 
no 83 == Cannot exec a shared library directly 
no 84 == Invalid or incomplete multibyte or wide character 
no 85 == Interrupted system call should be restarted 
no 86 == Streams pipe error 
no 87 == Too many users 
no 88 == Socket operation on non-socket 
no 89 == Destination address required 
no 90 == Message too long 
no 91 == Protocol wrong type for socket 
no 92 == Protocol not available 
no 93 == Protocol not supported 
no 94 == Socket type not supported 
no 95 == Operation not supported 
no 96 == Protocol family not supported 
no 97 == Address family not supported by protocol 
no 98 == Address already in use 
no 99 == Cannot assign requested address 
no 100 == Network is down 
no 101 == Network is unreachable 
no 102 == Network dropped connection on reset 
no 103 == Software caused connection abort 
no 104 == Connection reset by peer 
no 105 == No buffer space available 
no 106 == Transport endpoint is already connected 
no 107 == Transport endpoint is not connected 
no 108 == Cannot send after transport endpoint shutdown 
no 109 == Too many references: cannot splice 
no 110 == Connection timed out 
no 111 == Connection refused 
no 112 == Host is down 
no 113 == No route to host 
no 114 == Operation already in progress 
no 115 == Operation now in progress 
no 116 == Stale NFS file handle 
no 117 == Structure needs cleaning 
no 118 == Not a XENIX named type file 
no 119 == No XENIX semaphores available 
no 120 == Is a named type file 
no 121 == Remote I/O error 
no 122 == Disk quota exceeded 
no 123 == No medium found 
no 124 == Wrong medium type 
no 125 == Operation canceled 
no 126 == Required key not available 
no 127 == Key has expired 
no 128 == Key has been revoked 
no 129 == Key was rejected by service 
no 130 == Owner died 
no 131 == State not recoverable 
no 132 == Unknown error 132 
+0

Sólo curiosidad - ¿por qué elegiste 132? – paxdiablo

Cuestiones relacionadas