Errno
Un article de Haypo.
Retour aux articles de programmation
errno est un entier signé (type « int » en C) contenant un code d'erreur. Cette variable est utilisée par certaines fonctions de la libc pour expliquer l'échec d'une fonction. Exemple : la fonction fopen() (ouvrir un fichier) va assigner errno=ENOENT pour indiquer que le fichier qu'on désire ouvrir n'existe pas.
Sous Linux, on peut trouver une liste des codes d'erreurs possibles dans :
- /usr/include/asm-generic/errno-base.h (de 1 à 34)
- /usr/include/asm-generic/errno.h (de 35 à 131)
Sommaire |
[modifier] Outils en C
La variable « errno » est définie dans l'entête « errno.h ». On peut obtenir la description d'une erreur dans la langue de l'utilisateur avec la fonction « strerror() » (voir aussi la fonction « strerror_r() »). La glib offre la fonction « g_strerror() » (voir aussi « g_strsignal() »).
[modifier] Erreurs courantes
[modifier] Fichier
- ENOENT (2) : Fichier inexistant
- open(), fopen(), ...
- EBADF (9) : Numéro de fichier inexistant => erreur grave
- select()
- EEXIST (17) : Le fichier existe déjà
- mkdir()
[modifier] Processus
- ESRCH (3) : Processus inexistant
- kill()
- ECHILD (10) : Processus fils inexistant
- wait(), waitpid()
[modifier] Permission
- EPERM (1) : Opération interdite (Operation not permitted)
- EACCES (13) : Permission non accordée (Permission denied)
[modifier] Épuisement des ressources
- ENOMEM (12) : Épuisement de toute la mémoire vive
- ENOSPC (28) : Espace disque épuisé / disque dur plein (No space left on device)
[modifier] Divers
- EINTR (4) : Appel système interrompu : on peut ignorer cette erreur et réessayer l'appel
- select() peut déclancher une telle erreur
- EINVAL (22) : Argument invalide
- EPIPE (32) : Pipe brisé (Broken pipe)
- recv(), send(), read(), write(), ...
[modifier] Liste des erreurs Linux
Script Python pour afficher les erreurs :
import errno errors = [ (getattr(errno, name), name) for name in dir(errno) if name.startswith("E") ] errors.sort(key=lambda (number, name): number) for number, name in errors: print "% 3s: %s" % (number, name)
Résultat sous Linux Ubuntu Gutsy :
- 1: EPERM
- 2: ENOENT
- 3: ESRCH
- 4: EINTR
- 5: EIO
- 6: ENXIO
- 7: E2BIG
- 8: ENOEXEC
- 9: EBADF
- 10: ECHILD
- 11: EAGAIN
- 11: EWOULDBLOCK
- 12: ENOMEM
- 13: EACCES
- 14: EFAULT
- 15: ENOTBLK
- 16: EBUSY
- 17: EEXIST
- 18: EXDEV
- 19: ENODEV
- 20: ENOTDIR
- 21: EISDIR
- 22: EINVAL
- 23: ENFILE
- 24: EMFILE
- 25: ENOTTY
- 26: ETXTBSY
- 27: EFBIG
- 28: ENOSPC
- 29: ESPIPE
- 30: EROFS
- 31: EMLINK
- 32: EPIPE
- 33: EDOM
- 34: ERANGE
- 35: EDEADLK
- 35: EDEADLOCK
- 36: ENAMETOOLONG
- 37: ENOLCK
- 38: ENOSYS
- 39: ENOTEMPTY
- 40: ELOOP
- 42: ENOMSG
- 43: EIDRM
- 44: ECHRNG
- 45: EL2NSYNC
- 46: EL3HLT
- 47: EL3RST
- 48: ELNRNG
- 49: EUNATCH
- 50: ENOCSI
- 51: EL2HLT
- 52: EBADE
- 53: EBADR
- 54: EXFULL
- 55: ENOANO
- 56: EBADRQC
- 57: EBADSLT
- 59: EBFONT
- 60: ENOSTR
- 61: ENODATA
- 62: ETIME
- 63: ENOSR
- 64: ENONET
- 65: ENOPKG
- 66: EREMOTE
- 67: ENOLINK
- 68: EADV
- 69: ESRMNT
- 70: ECOMM
- 71: EPROTO
- 72: EMULTIHOP
- 73: EDOTDOT
- 74: EBADMSG
- 75: EOVERFLOW
- 76: ENOTUNIQ
- 77: EBADFD
- 78: EREMCHG
- 79: ELIBACC
- 80: ELIBBAD
- 81: ELIBSCN
- 82: ELIBMAX
- 83: ELIBEXEC
- 84: EILSEQ
- 85: ERESTART
- 86: ESTRPIPE
- 87: EUSERS
- 88: ENOTSOCK
- 89: EDESTADDRREQ
- 90: EMSGSIZE
- 91: EPROTOTYPE
- 92: ENOPROTOOPT
- 93: EPROTONOSUPPORT
- 94: ESOCKTNOSUPPORT
- 95: EOPNOTSUPP
- 96: EPFNOSUPPORT
- 97: EAFNOSUPPORT
- 98: EADDRINUSE
- 99: EADDRNOTAVAIL
- 100: ENETDOWN
- 101: ENETUNREACH
- 102: ENETRESET
- 103: ECONNABORTED
- 104: ECONNRESET
- 105: ENOBUFS
- 106: EISCONN
- 107: ENOTCONN
- 108: ESHUTDOWN
- 109: ETOOMANYREFS
- 110: ETIMEDOUT
- 111: ECONNREFUSED
- 112: EHOSTDOWN
- 113: EHOSTUNREACH
- 114: EALREADY
- 115: EINPROGRESS
- 116: ESTALE
- 117: EUCLEAN
- 118: ENOTNAM
- 119: ENAVAIL
- 120: EISNAM
- 121: EREMOTEIO
- 122: EDQUOT