.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (c) 2008 Petr Baudis .\" and copyright (c) 2009, Linux Foundation, written by Michael Kerrisk .\" .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" .\" 2008-12-08 Petr Baudis .\" Rewrite the BSD manpage in the Linux man pages style and account .\" for glibc specificities, provide an example. .\" 2009-01-14 mtk, many edits and changes, rewrote example program. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH getifaddrs 3 "23 iulie 2024" "Pagini de manual de Linux 6.12" .SH NUME getifaddrs, freeifaddrs \- obține adrese de interfațe .SH BIBLIOTECA Biblioteca C standard (\fIlibc\fP, \fI\-lc\fP) .SH SINOPSIS .nf \fB#include \fP \fB#include \fP .P \fBint getifaddrs(struct ifaddrs **\fP\fIifap\fP\fB);\fP \fBvoid freeifaddrs(struct ifaddrs *\fP\fIifa\fP\fB);\fP .fi .SH DESCRIERE Funcția \fBgetifaddrs\fP() creează o listă legată de structuri care descriu interfețele de rețea ale sistemului local și stochează adresa primului element al listei în \fI*ifap\fP. Lista este formată din structuri \fIifaddrs\fP, definite după cum urmează: .P .in +4n .EX struct ifaddrs { struct ifaddrs *ifa_next; /* Următorul element din listă */ char *ifa_name; /* Numele interfeței */ unsigned int ifa_flags; /* Fanioane de la SIOCGIFFLAGS */ struct sockaddr *ifa_addr; /* Adresa interfeței */ struct sockaddr *ifa_netmask; /* Masca de rețea a interfeței */ union { struct sockaddr *ifu_broadaddr; /* Adresa de difuzare a interfeței */ struct sockaddr *ifu_dstaddr; /* Adresa de destinație punct\-la\-punct */ } ifa_ifu; #define ifa_broadaddr ifa_ifu.ifu_broadaddr #define ifa_dstaddr ifa_ifu.ifu_dstaddr void *ifa_data; /* Date specifice adresei */ }; .EE .in .P Câmpul \fIifa_next\fP conține un indicator către următoarea structură din listă sau NULL dacă acesta este ultimul element din listă. .P .\" The constant .\" .B IF NAMESIZE .\" indicates the maximum length of this field. \fIifa_name\fP indică numele interfeței terminat prin nul. .P Câmpul \fIifa_flags\fP conține fanioanele interfeței, astfel cum sunt returnate de operația \fBSIOCGIFFLAGS\fP \fBioctl\fP(2) (a se vedea \fBnetdevice\fP(7) pentru o listă a acestor fanioane). .P Câmpul \fIifa_addr\fP trimite la o structură care conține adresa interfeței; (subcâmpul \fIsa_family\fP trebuie consultat pentru a determina formatul structurii de adrese). Acest câmp poate conține un indicator nul. .P Câmpul \fIifa_netmask\fP indică către o structură care conține masca de rețea asociată cu \fIifa_addr\fP, dacă este cazul pentru familia de adrese. Acest câmp poate conține un indicator nul. .P În funcție de starea (activat/dezactivat) a bitului \fBIFF_BROADCAST\fP sau \fBIFF_POINTOPOINT\fP în \fIifa_flags\fP (numai unul poate fi activat la un moment dat), \fIifa_broadaddr\fP va conține adresa de difuzare asociată cu \fIifa_addr\fP (dacă este aplicabilă pentru familia de adrese) sau \fIifa_dstaddr\fP va conține adresa de destinație a interfeței punct\-la\-punct. .P Câmpul \fIifa_data\fP indică o memorie tampon care conține date specifice familiei de adrese; acest câmp poate fi NULL dacă nu există astfel de date pentru această interfață. .P Datele returnate de \fBgetifaddrs\fP() sunt alocate dinamic și ar trebui eliberate utilizând \fBfreeifaddrs\fP() atunci când nu mai sunt necesare. .SH "VALOAREA RETURNATĂ" În caz de succes, \fBgetifaddrs\fP() returnează zero; în caz de eroare, este returnat \-1, iar \fIerrno\fP este configurată pentru a indica eroarea. .SH ERORI\-IEȘIRE \fBgetifaddrs\fP() poate eșua și configura \fIerrno\fP pentru oricare dintre erorile specificate pentru \fBsocket\fP(2), \fBbind\fP(2), \fBgetsockname\fP(2), \fBrecvmsg\fP(2), \fBsendto\fP(2), \fBmalloc\fP(3) sau \fBrealloc\fP(3). .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 \fBgetifaddrs\fP(), \fBfreeifaddrs\fP() T} Siguranța firelor MT\-Safe .TE .SH STANDARDE Niciunul. .SH ISTORIC .\" , but the BSD-derived documentation generally .\" appears to be confused and obsolete on this point. .\" i.e., commonly it still says one of them will be NULL, even if .\" the ifa_ifu union is already present Această funcție a apărut pentru prima dată în BSDi și este prezentă pe sistemele BSD, dar cu o semantică ușor diferită, documentată\-returnând o intrare pe interfață, nu pe adresă. Aceasta înseamnă că \fIifa_addr\fP și alte câmpuri pot fi de fapt NULL dacă interfața nu are adresă și nu este returnată nicio adresă la nivel de legătură(conexiune) dacă interfața are o adresă IP atribuită. De asemenea, modul de alegere a \fIifa_broadaddr\fP sau \fIifa_dstaddr\fP diferă de la un sistem la altul. .P \fBgetifaddrs\fP() a apărut pentru prima dată în glibc 2.3, dar înainte de glibc 2.3.3, implementarea accepta numai adrese IPv4; suportul pentru IPv6 a fost adăugat în glibc 2.3.3. Suportul pentru alte familii de adrese decât IPv4 este disponibil numai pe nucleele care acceptă netlink. .SH NOTE Adresele returnate pe Linux vor fi de obicei adresele IPv4 și IPv6 atribuite interfeței, dar și o adresă \fBAF_PACKET\fP pentru fiecare interfață care conține detalii de nivel inferior despre interfață și stratul său fizic. În acest caz, câmpul \fIifa_data\fP poate conține un indicator către o structură \fIstruct rtnl_link_stats\fP, definită în \fI\fP (în Linux 2.4 și anterior, \fIstruct net_device_stats\fP, definită în \fI\fP), care conține diverse atribute și statistici ale interfeței. .SH EXEMPLE Programul de mai jos demonstrează utilizarea \fBgetifaddrs\fP(), \fBfreeifaddrs\fP() și \fBgetnameinfo\fP(3). Iată ce vedem la rularea acestui program pe un sistem: .P .in +4n .EX $ \fB./a.out\fP lo AF_PACKET (17) tx_packets = 524; rx_packets = 524 tx_bytes = 38788; rx_bytes = 38788 wlp3s0 AF_PACKET (17) tx_packets = 108391; rx_packets = 130245 tx_bytes = 30420659; rx_bytes = 94230014 em1 AF_PACKET (17) tx_packets = 0; rx_packets = 0 tx_bytes = 0; rx_bytes = 0 lo AF_INET (2) address: <127.0.0.1> wlp3s0 AF_INET (2) address: <192.168.235.137> lo AF_INET6 (10) address: <::1> wlp3s0 AF_INET6 (10) address: .EE .in .SS "Sursa programului" \& .EX #define _GNU_SOURCE /* Pentru a obține definițiile NI_MAXSERV și NI_MAXHOST */ #include #include #include #include #include #include #include #include \& int main(int argc, char *argv[]) { struct ifaddrs *ifaddr; int family, s; char host[NI_MAXHOST]; \& if (getifaddrs(&ifaddr) == \-1) { perror("getifaddrs"); exit(EXIT_FAILURE); } \& /* Parcurgem lista legată, menținând indicatorul capului, astfel încât să putem elibera lista mai târziu. */ \& for (struct ifaddrs *ifa = ifaddr; ifa != NULL; ifa = ifa\->ifa_next) { if (ifa\->ifa_addr == NULL) continue; \& family = ifa\->ifa_addr\->sa_family; \& /* Afișează numele și familia interfeței (inclusiv forma simbolică a acesteia din urmă pentru familiile comune). */ \& printf("%\-8s %s (%d)\[rs]n", ifa\->ifa_name, (family == AF_PACKET) ? "AF_PACKET" : (family == AF_INET) ? "AF_INET" : (family == AF_INET6) ? "AF_INET6" : "???", family); \& /* Pentru o adresă de interfață AF_INET*, afișează adresa. */ \& if (family == AF_INET || family == AF_INET6) { s = getnameinfo(ifa\->ifa_addr, (family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); if (s != 0) { printf("getnameinfo() a eșuat: %s\[rs]n", gai_strerror(s)); exit(EXIT_FAILURE); } \& printf("\[rs]t\[rs]tadresa: <%s>\[rs]n", host); \& } else if (family == AF_PACKET && ifa\->ifa_data != NULL) { struct rtnl_link_stats *stats = ifa\->ifa_data; \& printf("\[rs]t\[rs]ttx_packets = %10u; rx_packets = %10u\[rs]n" "\[rs]t\[rs]ttx_bytes = %10u; rx_bytes = %10u\[rs]n", stats\->tx_packets, stats\->rx_packets, stats\->tx_bytes, stats\->rx_bytes); } } \& freeifaddrs(ifaddr); exit(EXIT_SUCCESS); } .EE .SH "CONSULTAȚI ȘI" \fBbind\fP(2), \fBgetsockname\fP(2), \fBsocket\fP(2), \fBpacket\fP(7), \fBifconfig\fP(8) .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 .