.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 2008, Linux Foundation, written by Michael Kerrisk .\" .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH getprotoent_r 3 "20 iulie 2023" "Pagini de manual de Linux 6.05.01" .SH NUME getprotoent_r, getprotobyname_r, getprotobynumber_r \- obține intrarea protocolului (reentrante) .SH BIBLIOTECA Biblioteca C standard (\fIlibc\fP, \fI\-lc\fP) .SH REZUMAT .nf \fB#include \fP .PP \fBint getprotoent_r(struct protoent *restrict \fP\fIresult_buf\fP\fB,\fP \fB char \fP\fIbuf\fP\fB[restrict .\fP\fIbuflen\fP\fB], size_t \fP\fIbuflen\fP\fB,\fP \fB struct protoent **restrict \fP\fIresult\fP\fB);\fP \fBint getprotobyname_r(const char *restrict \fP\fIname\fP\fB,\fP \fB struct protoent *restrict \fP\fIresult_buf\fP\fB,\fP \fB char \fP\fIbuf\fP\fB[restrict .\fP\fIbuflen\fP\fB], size_t \fP\fIbuflen\fP\fB,\fP \fB struct protoent **restrict \fP\fIresult\fP\fB);\fP \fBint getprotobynumber_r(int \fP\fIproto\fP\fB,\fP \fB struct protoent *restrict \fP\fIresult_buf\fP\fB,\fP \fB char \fP\fIbuf\fP\fB[restrict .\fP\fIbuflen\fP\fB], size_t \fP\fIbuflen\fP\fB,\fP \fB struct protoent **restrict \fP\fIresult\fP\fB);\fP .PP .fi .RS -4 Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați \fBfeature_test_macros\fP(7)): .RE .PP \fBgetprotoent_r\fP(), \fBgetprotobyname_r\fP(), \fBgetprotobynumber_r\fP(): .nf Începând cu glibc 2.19: _DEFAULT_SOURCE glibc 2.19 și versiunile anterioare: _BSD_SOURCE || _SVID_SOURCE .fi .SH DESCRIERE Funcțiile \fBgetprotoent_r\fP(), \fBgetprotobyname_r\fP() și \fBgetprotobynumber_r\fP() sunt echivalentele reentrante ale funcțiilor \fBgetprotoent\fP(3), \fBgetprotobyname\fP(3) și \fBgetprotobynumber\fP(3). Ele diferă prin modul în care este returnată structura \fIprotoent\fP, precum și prin semnătura de apelare a funcției și valoarea de returnare. Această pagină de manual descrie doar diferențele față de funcțiile nereentrante. .PP În loc să returneze un indicator la o structură \fIprotoent\fP alocată static ca rezultat al funcției, aceste funcții copiază structura în locația indicată de \fIresult_buf\fP. .PP .\" I can find no information on the required/recommended buffer size; .\" the nonreentrant functions use a 1024 byte buffer. .\" The 1024 byte value is also what the Solaris man page suggests. -- mtk Matricea \fIbuf\fP este utilizată pentru a stoca câmpurile de șiruri de caractere indicate de structura \fIprotoent\fP returnată; (funcțiile nereentrante alocă aceste șiruri de caractere în memoria statică). Dimensiunea acestei matrice este specificată în \fIbuflen\fP. Dacă \fIbuf\fP este prea mică, apelul eșuează cu eroarea \fBERANGE\fP, iar apelantul trebuie să încerce din nou cu o memorie tampon mai mare; (o memorie tampon cu o lungime de 1024 octeți ar trebui să fie suficientă pentru majoritatea aplicațiilor). .PP Dacă apelul funcției obține cu succes o înregistrare de protocol, atunci \fI*result\fP este stabilit la \fIresult_buf\fP; în caz contrar, \fI*result\fP este stabilit la NULL. .SH "VALOAREA RETURNATĂ" În caz de succes, aceste funcții returnează 0. În caz de eroare, acestea returnează unul dintre numerele pozitive de eroare enumerate în ERORI. .PP În caz de eroare, înregistrare nedescoperită (\fBgetprotobyname_r\fP(), \fBgetprotobynumber_r\fP()), sau sfârșit de intrare (\fBgetprotoent_r\fP()) \fIresult\fP este stabilit la NULL. .SH ERORI\-IEȘIRE .TP \fBENOENT\fP (\fBgetprotoent_r\fP()) Nu mai există înregistrări în baza de date. .TP \fBERANGE\fP \fIbuf\fP este prea mic. Încercați din nou cu o memorie tampon mai mare (și cu \fIbuflen\fP mărit). .SH ATRIBUTE Pentru o explicație a termenilor folosiți în această secțiune, a se vedea \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Interfață Atribut Valoare T{ .na .nh \fBgetprotoent_r\fP(), \fBgetprotobyname_r\fP(), \fBgetprotobynumber_r\fP() T} Siguranța firelor MT\-Safe locale .TE .sp 1 .SH VERSIUNI Funcții cu nume similare există și pe alte sisteme, deși, de obicei, cu semnături de apelare diferite. .SH STANDARDE GNU. .SH EXEMPLE Programul de mai jos utilizează \fBgetprotobyname_r\fP() pentru a prelua înregistrarea protocolului pentru protocolul numit în primul său argument de linie de comandă. În cazul în care se furnizează un al doilea argument de linie de comandă (întreg), acesta este utilizat ca valoare inițială pentru \fIbuflen\fP; dacă \fBgetprotobyname_r\fP() eșuează cu eroarea \fBERANGE\fP, programul încearcă din nou cu dimensiuni mai mari ale memoriei tampon. Următoarea sesiune shell prezintă câteva exemple de execuție: .PP .in +4n .EX $\fB ./a.out tcp 1\fP ERANGE! Reîncercare cu o memorie tampon mai mare getprotobyname_r() returned: 0 (success) (buflen=78) p_name=tcp; p_proto=6; aliases=TCP $\fB ./a.out xxx 1\fP ERANGE! Reîncercare cu o memorie tampon mai mare getprotobyname_r() returned: 0 (success) (buflen=100) Apel eșuat/înregistrarea nu a fost găsită .EE .in .SS "Sursa programului" .\" SRC BEGIN (getprotoent_r.c) \& .EX #define _GNU_SOURCE #include #include #include #include #include #include \& #define MAX_BUF 10000 \& int main(int argc, char *argv[]) { int buflen, erange_cnt, s; struct protoent result_buf; struct protoent *result; char buf[MAX_BUF]; \& if (argc < 2) { printf("Utilizare: %s proto\-name [buflen]\en", argv[0]); exit(EXIT_FAILURE); } \& buflen = 1024; if (argc > 2) buflen = atoi(argv[2]); \& if (buflen > MAX_BUF) { printf("Limita memoriei tampon a fost depășită (%d)\en", MAX_BUF); exit(EXIT_FAILURE); } \& erange_cnt = 0; do { s = getprotobyname_r(argv[1], &result_buf, buf, buflen, &result); if (s == ERANGE) { if (erange_cnt == 0) printf("ERANGE! Reîncercare cu o memorie tampon mai mare\en"); erange_cnt++; \& /* Incrementăm câte un octet pe rând, ca să putem vedea exact ce dimensiune a fost necesară pentru memoria tampon. */ \& buflen++; \& if (buflen > MAX_BUF) { printf("Limita memoriei tampon a fost depășită (%d)\en", MAX_BUF); exit(EXIT_FAILURE); } } } while (s == ERANGE); \& printf("getprotobyname_r() returned: %s (buflen=%d)\en", (s == 0) ? "0 (success)" : (s == ENOENT) ? "ENOENT" : strerror(s), buflen); \& if (s != 0 || result == NULL) { printf("Apel eșuat/înregistrarea nu a fost găsită\en"); exit(EXIT_FAILURE); } \& printf("p_name=%s; p_proto=%d; aliases=", result_buf.p_name, result_buf.p_proto); for (char **p = result_buf.p_aliases; *p != NULL; p++) printf("%s ", *p); printf("\en"); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "CONSULTAȚI ȘI" \fBgetprotoent\fP(3), \fBprotocols\fP(5) .PP .SH TRADUCERE Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu . .PP Această traducere este documentație gratuită; citiți .UR https://www.gnu.org/licenses/gpl-3.0.html Licența publică generală GNU Versiunea 3 .UE sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE. .PP Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la .MT translation-team-ro@lists.sourceforge.net .ME .