errno(3)

NUME
errno - numărul ultimei erori

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <errno.h>

DESCRIERE
Fișierul de antet <errno.h> definește variabila întreagă errno, care este configurată de apelurile sistemului și de unele funcții de bibliotecă în cazul unei erori pentru a indica ce nu a mers bine.

  errno
Valoarea din errno este semnificativă numai atunci când valoarea de returnare a apelului a indicat o eroare (de exemplu, -1 de la majoritatea apelurilor sistemului; -1 sau NULL de la majoritatea funcțiilor de bibliotecă); o funcție care reușește este autorizată să modifice errno. Valoarea lui errno nu este niciodată stabilită la zero de către niciun apel de sistem sau funcție de bibliotecă.

Pentru unele apeluri de sistem și funcții de bibliotecă (de exemplu, getpriority(2)), -1 este un rezultat valid în caz de succes. În astfel de cazuri, o returnare de succes poate fi diferențiată de o returnare de eroare prin configurarea errno la zero înainte de apel și apoi, dacă apelul returnează o stare care indică faptul că este posibil să fi avut loc o eroare, verificând pentru a vedea dacă errno are o valoare diferită de zero.

errno este definit de standardul ISO C ca fiind o lvaloare modificabilă de tip int și nu trebuie să fie declarată explicit; errno poate fi un macro. errno este „local într-un fir”l; definirea sa într-un fir nu afectează valoarea sa în niciun alt fir.

  Numere și nume de erori
Numerele de eroare valide sunt toate numere pozitive. Fișierul de antet <errno.h> definește nume simbolice pentru fiecare dintre numerele de eroare posibile care pot apărea în errno.

Toate numele erorilor specificate de POSIX.1 trebuie să aibă valori distincte, cu excepția EAGAIN și EWOULDBLOCK, care pot fi aceleași. În Linux, acestea două au aceeași valoare pe toate arhitecturile.

Numerele de eroare care corespund fiecărui nume simbolic variază de la un sistem UNIX la altul și chiar de la o arhitectură la alta în Linux. Prin urmare, valorile numerice nu sunt incluse ca parte a listei de nume de erori de mai jos. Funcțiile perror(3) și strerror(3) pot fi utilizate pentru a converti aceste nume în mesaje de eroare textuale corespunzătoare.

În orice sistem Linux particular, se poate obține o listă a tuturor numelor simbolice de erori și a numerelor de erori corespunzătoare folosind comanda errno(1) (parte a pachetului moreutils):

    $ errno -l;
    EPERM 1 Operația nu este permisă
    ENOENT 2 Nu există un astfel de fișier sau director
    ESRCH 3 Nu există un astfel de proces
    EINTR 4 Apel de sistem întrerupt
    EIO 5 Eroare de intrare/ieșire
    ...

Comanda errno(1) poate fi, de asemenea, utilizată pentru a căuta numere și nume de erori individuale și pentru a căuta erori utilizând șiruri de caractere din descrierea erorii, ca în exemplele următoare:

    $ errno 2;
    ENOENT 2 Nu există un astfel de fișier sau director
    $ errno ESRCH;
    ESRCH 3 Nu există un astfel de proces
    $ errno -s permission;
    EACCES 13 Permisiune refuzată

  Lista numelor de erori
În lista de nume simbolice ale erorilor de mai jos, diferite nume sunt marcate după cum urmează:

POSIX.1-2001
    Numele este definit de POSIX.1-2001 și este definit în versiunile ulterioare ale POSIX.1, dacă nu se indică altfel.

POSIX.1-2008
    Numele este definit în POSIX.1-2008, dar nu era prezent în standardele POSIX.1 anterioare.

C99 Numele este definit de C99.

Mai jos este o listă a numelor simbolice de erori care sunt definite în Linux:

E2BIG
    Lista de argumente este prea lungă (POSIX.1-2001).

EACCES
    Permisiune refuzată (POSIX.1-2001).

EADDRINUSE
    Adresa este deja utilizată (POSIX.1-2001).

EADDRNOTAVAIL
    Adresa nu este disponibilă (POSIX.1-2001).

EAFNOSUPPORT
    Familia de adrese nu este acceptată (POSIX.1-2001).

EAGAIN
    Resursă temporar indisponibilă (poate fi aceeași valoare ca EWOULDBLOCK) (POSIX.1-2001).

EALREADY
    Conexiunea este deja în curs (POSIX.1-2001).

EBADE
    Schimb nevalid.

EBADF
    Descriptor de fișier incorect (POSIX.1-2001).

EBADFD
    Descriptor de fișier în stare proastă.

EBADMSG
    Mesaj incorect (POSIX.1-2001).

EBADR
    Descriptor de solicitare nevalid.

EBADRQC
    Cod de solicitare nevalid.

EBADSLT
    Slot nevalid.

EBUSY
    Dispozitiv sau resursă ocupată (POSIX.1-2001).

ECANCELED
    Operație anulată (POSIX.1-2001).

ECHILD
    Nu există procese-copil (POSIX.1-2001).

ECHRNG
    Numărul canalului este în afara intervalului.

ECOMM
    Eroare de comunicare la trimitere.

ECONNABORTED
    Conexiune întreruptă (POSIX.1-2001).

ECONNREFUSED
    Conexiune refuzată (POSIX.1-2001).

ECONNRESET
    Conexiune reinițiată (POSIX.1-2001).

EDEADLK
    Blocare de resursă evitată (POSIX.1-2001).

EDEADLOCK
    Pe majoritatea arhitecturilor, un sinonim pentru EDEADLK. Pe unele arhitecturi (de exemplu, Linux MIPS, PowerPC, SPARC), acesta este un cod de eroare separat „Eroare de blocare a blocajului fișierului”.

EDESTADDRREQ
    Adresă de destinație necesară (POSIX.1-2001).

EDOM
    Argument matematic în afara domeniului funcției (POSIX.1, C99).

EDQUOT
    Cota de disc a fost depășită (POSIX.1-2001).

EEXIST
    Fișierul există (POSIX.1-2001).

EFAULT
    Adresă greșită (POSIX.1-2001).

EFBIG
    Fișier prea mare (POSIX.1-2001).

EHOSTDOWN
    Gazda este deconectată.

EHOSTUNREACH
    Gazda este inaccesibilă (POSIX.1-2001).

EHWPOISON
    Pagina de memorie are o eroare hardware.

EIDRM
    Identificator eliminat (POSIX.1-2001).

EILSEQ
    Caracter multioctet sau lat nevalid sau incomplet (POSIX.1, C99).

    Textul afișat aici este descrierea erorii glibc; în POSIX.1, această eroare este descrisă ca „Secvență ilegală de octeți”.

EINPROGRESS
    Operațiune în curs de desfășurare (POSIX.1-2001).

EINTR
    Apel de funcție întrerupt (POSIX.1-2001); a se vedea signal(7).

EINVAL
    Argument nevalid (POSIX.1-2001).

EIO Eroare de intrare/ieșire (POSIX.1-2001).

EISCONN
    Soclul este conectat (POSIX.1-2001).

EISDIR
    Este un director (POSIX.1-2001).

EISNAM
    Este un fișier de tipul numit.

EKEYEXPIRED
    Cheia a expirat.

EKEYREJECTED
    Cheia a fost respinsă de către serviciu.

EKEYREVOKED
    Cheia a fost revocată.

EL2HLT
    Nivelul 2 oprit.

EL2NSYNC
    Nivelul 2 nu este sincronizat.

EL3HLT
    Nivelul 3 oprit.

EL3RST
    Nivelul 3 reinițiat.

ELIBACC
    Nu se poate accesa o bibliotecă partajată necesară.

ELIBBAD
    Se accesează o bibliotecă partajată coruptă.

ELIBMAX
    Se încearcă vincularea la prea multe biblioteci partajate.

ELIBSCN
    Secțiunea .lib din a.out este coruptă

ELIBEXEC
    Nu se poate executa direct o bibliotecă partajată.

ELNRNG
    Numărul de legătură este în afara intervalului.

ELOOP
    Prea multe niveluri de legături simbolice (POSIX.1-2001).

EMEDIUMTYPE
    Tip de mediu(suport) greșit.

EMFILE
    Prea multe fișiere deschise (POSIX.1-2001). Cauzată frecvent de depășirea limitei de resurse RLIMIT_NOFILE descrisă în getrlimit(2). Poate fi cauzată și de depășirea limitei specificate în /proc/sys/fs/nr_open.

EMLINK
    Prea multe legături (POSIX.1-2001).

EMSGSIZE
    Mesajul este prea lung (POSIX.1-2001).

EMULTIHOP
    Încercare de salturi multiple „multihop” (POSIX.1-2001).

ENAMETOOLONG
    Numele fișierului este prea lung (POSIX.1-2001).

ENETDOWN
    Rețeaua este căzută(dezactivată) (POSIX.1-2001).

ENETRESET
    Conexiune întreruptă de rețea (POSIX.1-2001).

ENETUNREACH
    Rețea inaccesibilă (POSIX.1-2001).

ENFILE
    Prea multe fișiere deschise în sistem (POSIX.1-2001). În Linux, acesta este probabil un rezultat al atingerii limitei /proc/sys/fs/file-max (a se vedea proc(5)).

ENOANO
    Nici un anod -- NT.: traducerea literală; de asemenea „anode” poate să însemne o vaiație de nod-i, sau nod-alocat.

ENOBUFS
    Nu există spațiu tampon disponibil [POSIX.1 (opțiunea XSI STREAMS)].

ENODATA
    Atributul numit nu există sau procesul nu are acces la acest atribut; a se vedea xattr(7).

    În POSIX.1-2001 (opțiunea XSI STREAMS), această eroare a fost descrisă ca „Niciun mesaj nu este disponibil în coada de citire a fluxului (STREAM)”.

ENODEV
    Nu există un astfel de dispozitiv (POSIX.1-2001).

ENOENT
    Nu există un astfel de fișier sau director (POSIX.1-2001).

    De obicei, această eroare apare atunci când un nume de rută specificat nu există, sau una dintre componentele din prefixul de director al unui nume de rută nu există, sau numele de rută specificat este o legătură simbolică întreruptă(fără țintă).

ENOEXEC
    Eroare de format de execuție (POSIX.1-2001).

ENOKEY
    Cheia necesară nu este disponibilă.

ENOLCK
    Nu există blocaje disponibile (POSIX.1-2001).

ENOLINK
    Legătura a fost întreruptă (POSIX.1-2001).

ENOMEDIUM
    Nu a fost găsit niciun mediu(suport).

ENOMEM
    Nu este suficient spațiu/nu se poate aloca memorie (POSIX.1-2001).

ENOMSG
    Niciun mesaj de tipul dorit (POSIX.1-2001).

ENONET
    Mașina nu este în rețea.

ENOPKG
    Pachetul nu este instalat.

ENOPROTOOPT
    Protocolul nu este disponibil (POSIX.1-2001).

ENOSPC
    Nu mai există spațiu liber pe dispozitiv (POSIX.1-2001).

ENOSR
    Nu există resurse STREAM [POSIX.1 (XSI STREAMS option)].

ENOSTR
    Nu este un flux(STREAM) [POSIX.1 (XSI STREAMS option)].

ENOSYS
    Funcție neimplementată (POSIX.1-2001).

ENOTBLK
    Este necesar un dispozitiv de blocuri.

ENOTCONN
    Soclul nu este conectat (POSIX.1-2001).

ENOTDIR
    Nu este un director (POSIX.1-2001).

ENOTEMPTY
    Directorul nu este gol (POSIX.1-2001).

ENOTRECOVERABLE
    Stare nerecuperabilă (POSIX.1-2008).

ENOTSOCK
    Nu este un soclu (POSIX.1-2001).

ENOTSUP
    Operație neacceptată (POSIX.1-2001).

ENOTTY
    Operație de control de In/Ieș nepotrivită (POSIX.1-2001).

ENOTUNIQ
    Numele nu este unic în rețea.

ENXIO
    Nu există un astfel de dispozitiv sau adresă (POSIX.1-2001).

EOPNOTSUPP
    Operația nu este acceptată pe soclu (POSIX.1-2001).

    (ENOTSUP și EOPNOTSUPP au aceeași valoare în Linux, dar conform POSIX.1 aceste valori de eroare ar trebui să fie distincte.)

EOVERFLOW
    Valoare prea mare pentru a fi stocată în tipul de date (POSIX.1-2001).

EOWNERDEAD
    Proprietarul a murit (POSIX.1-2008).

EPERM
    Operație nepermisă (POSIX.1-2001).

EPFNOSUPPORT
    Familia de protocoale nu este acceptată.

EPIPE
    Conductă ruptă (POSIX.1-2001).

EPROTO
    Eroare de protocol (POSIX.1-2001).

EPROTONOSUPPORT
    Protocolul nu este acceptat (POSIX.1-2001).

EPROTOTYPE
    Tip greșit de protocol pentru soclu (POSIX.1-2001).

ERANGE
    Rezultatul este prea mare (POSIX.1, C99).

EREMCHG
    Adresa de la distanță a fost modificată.

EREMOTE
    Obiectul este la distanță.

EREMOTEIO
    Eroare de In/Ieș la distanță.

ERESTART
    Apelul de sistem întrerupt ar trebui să fie repornit.

ERFKILL
    Operația nu este posibilă din cauza RF-kill (sercviciul de radiofrecvență deconectat).

EROFS
    Sistem de fișiere de numai-citire (POSIX.1-2001).

ESHUTDOWN
    Nu se poate trimite după deconectarea punctului final de transfer.

ESPIPE
    Căutare nevalidă (POSIX.1-2001).

ESOCKTNOSUPPORT
    Tip de soclu neacceptat.

ESRCH
    Nu există un astfel de proces (POSIX.1-2001).

ESTALE
    Gestionare de fișiere învechită (POSIX.1-2001).

    Această eroare poate apărea pentru NFS și pentru alte sisteme de fișiere.

ESTRPIPE
    Eroare de conductă de fluxuri.

ETIME
    Temporizator expirat [POSIX.1 (XSI STREAMS option)].

    (POSIX.1 spune „STREAM ioctl(2) timeout” - s-a depășit timpul de așteptare al FLUXULUI ioctl(2).)

ETIMEDOUT
    Conexiunea a expirat (POSIX.1-2001).

ETOOMANYREFS
    Prea multe referințe: nu se pot îmbina.

ETXTBSY
    Fișier text ocupat (POSIX.1-2001).

EUCLEAN
    Structura trebuie curățată.

EUNATCH
    Controlorul de protocol nu este atașat.

EUSERS
    Prea mulți utilizatori.

EWOULDBLOCK
    Operația s-ar putea bloca (poate fi aceeași valoare ca EAGAIN) (POSIX.1-2001).

EXDEV
    Legătură nevalidă între dispozitive (POSIX.1-2001).

EXFULL
    Schimbul este plin.

NOTE
O greșeală frecventă este de a face

    if (apelul-oarecare() == -1) {
        printf("apelul-oarecare() a eșuat\n");
        if (errno == ...) { ... }
    }

în care errno nu mai trebuie să aibă valoarea pe care a avut-o la returnarea de la apelul-oarecare() (de exemplu, este posibil să fi fost modificată de printf(3)). Dacă valoarea lui errno trebuie păstrată de-a lungul unui apel de bibliotecă, aceasta trebuie salvată:

    if (apelul-oarecare() == -1) {
        int errsv = errno;
        printf("apelul-oarecare() a eșuat\n");
        if (errsv == ...) { ... }
    }

Rețineți că API-urile firelor POSI nu configurează errno în caz de eroare. În schimb, în caz de eșec, acestea returnează un număr de eroare ca rezultat al funcției. Aceste numere de eroare au aceleași semnificații ca numerele de eroare returnate în errno de alte API-uri.

Pe unele sisteme vechi, <errno.h> nu era prezent sau nu declara errno, astfel încât era necesar să se declare errno manual (adică extern int errno). Nu faceți acest lucru. A încetat de mult să mai fie necesar și va cauza probleme cu versiunile moderne ale bibliotecii C.

CONSULTAȚI ȘI
errno(1), err(3), error(3), perror(3), strerror(3)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.