table of contents
- trixie-backports 4.28.0-2~bpo13+2
- testing 4.28.0-2
- unstable 4.28.0-2
errno(3) | Library Functions Manual | 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.
- 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 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.
15 iunie 2024 | Pagini de manual de Linux 6.9.1 |