Errno

Un article de Haypo.

Retour à la page précédente 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

[modifier] Articles connexes

[modifier] Liens