error(3)

NUME
error, error_at_line, error_message_count, error_one_per_line, error_print_progname - funcții de raportare a erorilor glibc

BIBLIOTECA
Biblioteca C standard (libc, -lc)

REZUMAT
#include <error.h>

void error(int status, int errnum, const char *format, ...);
void error_at_line(int status, int errnum, const char *filename,
                   unsigned int linenum, const char *format, ...);

extern unsigned int error_message_count;
extern int error_one_per_line;

extern void (*error_print_progname)(void);

DESCRIERE
error() este o funcție generală de raportare a erorilor. Aceasta curăță stdout, apoi transmite la stderr numele programului, două puncte și un spațiu, mesajul specificat de șirul de format în stil printf(3) format și, dacă errnum este diferită de zero, un al doilea punct și un spațiu urmat de șirul dat de strerror(errnum). Orice argumente necesare pentru format trebuie să urmeze format în lista de argumente. Ieșirea se termină cu un caracter de linie nouă.

Numele programului afișat de error() este valoarea variabilei globale program_invocation_name(3). program_invocation_name are inițial aceeași valoare ca și argv[0] din main(). Valoarea acestei variabile poate fi modificată pentru a schimba rezultatul lui error().

Dacă status are o valoare diferită de zero, atunci error() apelează exit(3) pentru a termina programul folosind valoarea dată ca stare de ieșire; în caz contrar, returnează după imprimarea mesajului de eroare.

Funcția error_at_line() este exact la fel ca error(), cu excepția adăugării argumentelor filename și linenum. Rezultatul produs este același ca și pentru error(), cu excepția faptului că după numele programului sunt scrise: două puncte, valoarea lui filename, două puncte și valoarea lui linenum. Valorile preprocesorului __LINE__ și __FILE__ pot fi utile atunci când se apelează error_at_line(), dar pot fi utilizate și alte valori. De exemplu, aceste argumente se pot referi la o locație dintr-un fișier de intrare.

În cazul în care variabila globală error_one_per_line este stabilită la o valoare diferită de zero, o secvență de apeluri error_at_line() cu aceeași valoare a filename și linenum va avea ca rezultat emiterea unui singur mesaj (primul).

Variabila globală error_message_count numără numărul de mesaje care au fost emise de error() și error_at_line().

Dacă variabilei globale error_print_progname i se atribuie adresa unei funcții (adică nu este NULL), atunci acea funcție este apelată în loc să se prefixeze mesajul cu numele programului și două puncte. Funcția ar trebui să afișeze un șir de caractere adecvat în stderr.

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
error() | Siguranța firelor | MT-Safe locale
error_at_line() | Siguranța firelor | MT-Unsafe race: error_at_line/error_one_per_line locale

Variabila internă error_one_per_line este accesată (fără nici o formă de sincronizare, dar din moment ce este un int folosit o singură dată, ar trebui să fie suficient de sigur) și, dacă error_one_per_line este stabilită la o valoare diferită de zero, variabilele statice interne (neexpuse utilizatorilor) folosite pentru a păstra ultimul nume de fișier tipărit și numărul de linie sunt accesate și modificate fără sincronizare; actualizarea nu este atomică și are loc înainte de dezactivarea anulării, astfel încât poate fi întreruptă numai după ce una dintre cele două variabile este modificată. După aceea, error_at_line() seamănă foarte mult cu error().

STANDARDE
GNU.

CONSULTAȚI ȘI
err(3), errno(3), exit(3), perror(3), program_invocation_name(3), strerror(3)

TRADUCERE
Traducerea în limba română a acestui manual a fost creată 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.