Π€ΡΠ½ΠΊΡΠΈΡ if_nameindex Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΡΠΊΡΡΡ if_nameindex:
struct if_nameindex {
unsigned int if_index; /* 1, 2. ... */
char *if_name; /* ΠΈΠΌΡ, Π·Π°Π²Π΅ΡΡΠ°Π΅ΠΌΠΎΠ΅ Π½ΡΠ»Π΅ΠΌ: "le0", ... */
};
ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ Π·Π°ΠΏΠΈΡΡ Π² ΡΡΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΡΠΊΡΡΡΡ Ρ Π½ΡΠ»Π΅Π²ΡΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ if_index ΠΈ Ρ ΠΏΡΡΡΡΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ ifname. ΠΠ°ΠΌΡΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΠΈΠΌΠ΅Π½, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°, Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ if_freenameindex.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΈΡ ΡΠ΅ΡΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΡΡΡΠΈΡ ΡΠΎΠΊΠ΅ΡΠΎΠ².
Π€ΡΠ½ΠΊΡΠΈΡ if_nametoindex
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 18.11 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ if_nametoindex.
ΠΠΈΡΡΠΈΠ½Π³ 18.11. ΠΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ
//libroute/if_nametoindex.c
1 #include "unpifi.h"
2 #include "unproute.h"
3 unsigned int
4 if_nametoindex(const char *name)
5 {
6 unsigned int idx, namelen;
7 char *buf, *next, *lim;
8 size_t len;
9 struct if_msghdr *ifm;
10 struct sockadd *sa, *rti_info[RTAX_MAX];
11 struct sockaddr_dl *sdl;
12 if ((buf = net_rt_iflist(0, 0, &len)) == NULL)
13 return(0);
14 namelen = strlen(name);
15 lim = buf + len;
16 for (next = buf; next < lim; next += ifm->ifm_msglen) {
17 ifm = (struct if_msghdr*)next;
18 if (ifm->ifm_type == RTM_IFINFO) {
19 sa = (struct sockaddr*)(ifm + 1);
20 get_rtaddrs(ifm->ifm_addrs, sa, rti_info);
21 if ((sa = rti_infΠΎ[RTAX_IFP]) != NULL) {
22 if (sa->sa_family == AF_LINK) {
23 sdl = (struct sockaddr_dl*)sa;
24 if (sdl->sdl_nlen == namelen
25 && strncmp(&sdl->sdl_data[0], name,
26 sdl->sdl_nlen) == 0) {
27 idx = sdl->sdl_index; /* ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄
Π²ΡΠ·ΠΎΠ²ΠΎΠΌ free */
28 free(buf);
29 return(idx);
30 }
31 }
32 }
33 }
34 }
35 free(buf);
36 return(0); /* ΠΈΠ½Π΄Π΅ΠΊΡ Π΄Π»Ρ ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ */
37 }
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²12-13 ΠΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ net_rt_iflist Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ².
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ RTM_IFINFO17-30 ΠΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π±ΡΡΠ΅ΡΠ΅ (ΡΠΌ. ΡΠΈΡ. 18.4) Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠ° RTM_IFINFO. ΠΠ°ΠΉΠ΄Ρ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ get_rtaddrs, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°, Π° Π΅ΡΠ»ΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° (ΡΠ»Π΅ΠΌΠ΅Π½Ρ RTAX_IFP ΠΌΠ°ΡΡΠΈΠ²Π° rti_info), ΡΠΎ ΠΈΠΌΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ.
Π€ΡΠ½ΠΊΡΠΈΡ if_indextoname
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ, if_indextoname, ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 18.12.
ΠΠΈΡΡΠΈΠ½Π³ 18.12. ΠΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ
libroute/if_indextoname.c
1 #include "unpifi.h"
2 #include "unproute.h"
3 char*
4 if_indextoname(unsigned int index, char *name)
5 {
6 char *buf, *next, *lim;
7 size_t len;
8 struct if_msghdr *ifm;
9 struct sockaddr *sa, *rti_info[RTAX_MAX];
10 struct sockaddr_dl *sdl;
11 if ((buf = net_rt_iflist(0, index, &len)) == NULL)
12 return (NULL);
13 lim = buf + len;
14 for (next = buf; next < lim; next += ifm->ifm_msglen) {
15 ifm = (struct if_msghdr*)next;
16 if (ifm->ifm_type == RTM_IFINFO) {
17 sa = (struct sockaddr*)(ifm + 1);
18 get_rtaddrs(ifm->ifm_addrs, sa, rti_info);
19 if ((sa = rti_info[RTAX_IFP]) != NULL) {
20 if (sa->sa_family == AF_LINK) {
21 sdl = (struct sockaddr_dl*)sa;
22 if (sdl->sdl_index == index) {
23 int slen = min(IFNAMSIZ - 1, sdl->sdl_nlen);
24 strncpy(name, sdl->sdl_data, slen);
25 name[slen] = 0; /* Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ Π½ΡΠ»Ρ */
26 free(buf);
27 return (name);
28 }
29 }
30 }
31 }
32 }
33 free(buf);
34 return (NULL); /* Π½Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ */
35 }
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ, Π½ΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΌΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ net_rt_iflist β ΡΡΠΎ Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠΎΠ³Π΄Π° ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈΠΌΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ Π½ΡΠ»Ρ.
Π€ΡΠ½ΠΊΡΠΈΡ if_nameindex
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ, if_nameindex, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΡΠΊΡΡΡ if_nameindex, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ Π²ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΡ. ΠΠ½Π° ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 18.13.
ΠΠΈΡΡΠΈΠ½Π³ 18.13. ΠΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΈΠΌΠ΅Π½ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²
//libroute/if_nameindex.c
1 #include "unpifi.h"
2 #include "unproute.h"
3 struct if_nameindex*
4 if_nameindex(void)
5 {
6 char *buf, *next, *lim;
7 size_t len;
8 struct if_msghdr *ifm;
9 struct sockaddr *sa, *rti_info[RTAX_MAX];
10 struct sockaddr_dl *sdl;
11 struct if_nameindex *result, *ifptr;
12 char *namptr;
13 if ((buf = net_it_iflist(0, 0, &len)) == NULL)
14 return (NULL);
15 if ((result = malloc(len)) == NULL) /* Π·Π°Π²ΡΡΠ΅Π½Π½Π°Ρ ΠΎΡΠ΅Π½ΠΊΠ° */
16 return (NULL);
17 ifptr = result;
18 namptr = (char*)result + len; /* ΠΈΠΌΠ΅Π½Π° Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΠΊΠΎΠ½ΡΠ° Π±ΡΡΠ΅ΡΠ° */
19 lim = buf + len;
20 for (next = buf; next < lim; next += ifm->ifm_msglen) {
21 ifm = (struct if_msghdr*)next;
22 if (ifm->ifm_type == RTM_IFINFO) {
23 sa = (struct sockaddr*)(ifm + 1);
24 get_rtaddrs(ifm->ifm_addrs, sa, rti_info);
25 if ((sa = rti_infΠΎ[RTAX_IFP]) != NULL) {
26 if (sa->sa_family == AF_LINK) {
27 sdl = (struct sockaddr_in*)sa;
28 namptr -= sdl->sdl_nlen + 1;
29 strncpy(namptr, &sdl->sdl_data[0], sdl->sdl_nlen);
30 namptr[sdl->sdl_nlen] = 0; /* Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ Π½ΡΠ»Ρ */
31 ifptr->if_name = namptr;
32 ifptr->if_index = sdl->sdl_index;
33 ifptr++;
34 }
35 }
36 }
37 }
38 ifptr->if_name = NULL; /* ΠΎΡΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠΎΠ½Π΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΡΡΡΠΊΡΡΡ */
39 ifptr->if_index = 0;
40 free(buf);
41 return (result); /* Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΠΏΠ°ΠΌΡΡΡ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ free(), ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ ΡΠ΄Π΅Π»Π°Π½ΠΎ */
43 }
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΡΠ° Π΄Π»Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°13-18 ΠΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ net_rt_iflist Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ². ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π±ΡΡΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ ΡΡΡΡΠΊΡΡΡ if_nameindex. ΠΡΠ΅Π½ΠΊΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π±ΡΡΠ΅ΡΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°Π²ΡΡΠ΅Π½Π°, Π½ΠΎ ΡΡΠΎ ΠΏΡΠΎΡΠ΅, ΡΠ΅ΠΌ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π΄Π²Π°ΠΆΠ΄Ρ: ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π΄Π»Ρ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΡΠΈΡΠ»Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΈ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈΠΌΠ΅Π½, Π° Π²ΡΠΎΡΠΎΠΉ β Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΡΡΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² if_nameindex Π² Π½Π°ΡΠ°Π»Π΅ ΡΡΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΈΠΌΠ΅Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΊΠΎΠ½ΡΠ° Π±ΡΡΠ΅ΡΠ°.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ RTM_IFINFO22-36 ΠΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΈΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ RTM_IFINFO ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π° Π½ΠΈΠΌΠΈ ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°. ΠΠΌΡ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΉ Π½Π°ΠΌΠΈ ΠΌΠ°ΡΡΠΈΠ².
ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°38-39 ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ Π·Π°ΠΏΠΈΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΡΡΠΎΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ if_name ΠΈ Π½ΡΠ»Π΅Π²ΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ.
Π€ΡΠ½ΠΊΡΠΈΡ if_freenameindex
ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Π°Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 18.13, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΏΠ°ΠΌΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π²ΡΠ΄Π΅Π»Π΅Π½Π° Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΡΡΡΠΊΡΡΡ if_nameindex ΠΈ Ρ ΡΠ°Π½ΡΡΠΈΡ ΡΡ Π² Π½Π΅ΠΌ ΠΈΠΌΠ΅Π½.
ΠΠΈΡΡΠΈΠ½Π³ 18.14. ΠΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ, Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ if_nameindex
43 void
44 if_freenameindex(struct if_nameindex *ptr)
45 {
46 free(ptr);
47 }
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈ ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΡΠΊΡΡΡ, ΠΈ ΠΈΠΌΠ΅Π½Π° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ Π±ΡΡΠ΅ΡΠ΅. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π²ΡΠ·ΡΠ²Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ malloc, ΡΠΎ Π΄Π»Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ Π½Π°ΠΌ Π±Ρ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΠ΅Π· Π²Π΅ΡΡ ΠΌΠ°ΡΡΠΈΠ², ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ ΠΏΠ°ΠΌΡΡΡ, Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΄Π°Π»ΡΡΡ ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΠ² (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ free).
18.7. Π Π΅Π·ΡΠΌΠ΅
ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΈΠ· ΡΡΡΡΠΊΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ Π²ΡΡΡΠ΅ΡΠΈΠ»ΠΈΡΡ Π² ΠΊΠ½ΠΈΠ³Π΅, ΡΡΠΎ sockaddr_dl β ΡΡΡΡΠΊΡΡΡΠ° Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ° ΠΊΠ°Π½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΠΈΠΌΠ΅ΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π»ΠΈΠ½Ρ. Π―Π΄ΡΠ° ΠΠ΅ΡΠΊΠ»ΠΈ-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ ΠΈΡ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡΠΈΡ ΡΡΡΡΠΊΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π΅Π³ΠΎ ΠΈΠΌΡ ΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΉ Π°Π΄ΡΠ΅Ρ.
Π ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΡΠΎΠΊΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΠ°Π½Ρ 5 ΡΠΈΠΏΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΈ 12 ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Ρ ΡΠ΄ΡΠΎΠΌ ΡΠ΅ΡΠ΅Π· ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ ΡΠΎΠΊΠ΅Ρ. ΠΡ ΠΏΡΠΈΠ²Π΅Π»ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Ρ ΡΠ΄ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠ΄ΡΠΎ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΡΠΌΠΈ. ΠΡΠ²Π΅ΡΡ ΡΠ΄ΡΠ° ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄ΠΎ Π²ΠΎΡΡΠΌΠΈ ΡΡΡΡΠΊΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.