.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 2008, Petr Baudis .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH getifaddrs 3 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم getifaddrs, freeifaddrs \- الحصول على عناوين الواجهات .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .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 الوصف تنشئ الدالة \fBgetifaddrs\fP() قائمة مترابطة من البنى تصف واجهات الشبكة للنظام المحلي، وتخزن عنوان أول عنصر من القائمة في \fI*ifap\fP. تتكون القائمة من بنى \fIifaddrs\fP، المُعرَّفة كما يلي: .P .in +4n .EX struct ifaddrs { struct ifaddrs *ifa_next; /* العنصر التالي في القائمة */ char *ifa_name; /* اسم الواجهة */ unsigned int ifa_flags; /* الأعلام القادمة من SIOCGIFFLAGS */ struct sockaddr *ifa_addr; /* عنوان الواجهة */ struct sockaddr *ifa_netmask; /* قناع الشبكة (netmask) للواجهة */ union { struct sockaddr *ifu_broadaddr; /* عنوان البث (broadcast) للواجهة */ struct sockaddr *ifu_dstaddr; /* عنوان الوجهة لنقطة إلى نقطة (point\-to\-point) */ } ifa_ifu; #define ifa_broadaddr ifa_ifu.ifu_broadaddr #define ifa_dstaddr ifa_ifu.ifu_dstaddr void *ifa_data; /* بيانات خاصة بالعنوان */ }; .EE .in .P يحتوي الحقل \fIifa_next\fP على مؤشر إلى البنية التالية في القائمة، أو NULL إذا كان هذا هو العنصر الأخير في القائمة. .P .\" The constant .\" .B IF NAMESIZE .\" indicates the maximum length of this field. يشير \fIifa_name\fP إلى اسم الواجهة المنتهي بقيمة خالية. .P يحتوي الحقل \fIifa_flags\fP على أعلام الواجهة، كما تُرجعها عملية \fBSIOCGIFFLAGS\fP \fBioctl\fP(2) (انظر \fBnetdevice\fP(7) للحصول على قائمة بهذه الأعلام). .P يشير الحقل \fIifa_addr\fP إلى بنية تحتوي على عنوان الواجهة. (يجب الرجوع إلى الحقل الفرعي \fIsa_family\fP لتحديد تنسيق بنية العنوان.) قد يحتوي هذا الحقل على مؤشر فارغ. .P يشير الحقل \fIifa_netmask\fP إلى بنية تحتوي على قناع الشبكة المرتبط بـ \fIifa_addr\fP، إذا كان ذلك مناسبًا لعائلة العنوان. قد يحتوي هذا الحقل على مؤشر فارغ. .P اعتمادًا على ما إذا كان البت \fBIFF_BROADCAST\fP أو \fBIFF_POINTOPOINT\fP مضبوطًا في \fIifa_flags\fP (يمكن ضبط واحد فقط في كل مرة)، إما أن يحتوي \fIifa_broadaddr\fP على عنوان البث المرتبط بـ \fIifa_addr\fP (إذا كان مناسبًا لعائلة العنوان) أو يحتوي \fIifa_dstaddr\fP على عنوان الوجهة للواجهة من نقطة إلى نقطة. .P يشير الحقل \fIifa_data\fP إلى مخزن مؤقت يحتوي على بيانات خاصة بعائلة العنوان؛ قد يكون هذا الحقل NULL إذا لم توجد مثل هذه البيانات لهذه الواجهة. .P البيانات التي تُرجعها \fBgetifaddrs\fP() مُخصصة ديناميكيًا ويجب تحريرها باستخدام \fBfreeifaddrs\fP() عند عدم الحاجة إليها. .SH "قيمة الإرجاع" عند النجاح، تُرجع \fBgetifaddrs\fP() صفرًا؛ عند الخطأ، تُرجع \-1، ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء قد تفشل \fBgetifaddrs\fP() وتُضبط \fIerrno\fP لأي من الأخطاء المُحددة لـ \fBsocket\fP(2)، \fBbind\fP(2)، \fBgetsockname\fP(2)، \fBrecvmsg\fP(2)، \fBsendto\fP(2)، \fBmalloc\fP(3)، أو \fBrealloc\fP(3). .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. الواجهة السمة القيمة T{ .na .nh \fBgetifaddrs\fP(), \fBfreeifaddrs\fP() T} سلامة الخيوط MT\-Safe .TE .SH المعايير لا شيء. .SH التاريخ .\" , 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 ظهرت هذه الدالة لأول مرة في BSDi وهي موجودة على أنظمة BSD، ولكن بدلالات مختلفة قليلاً موثقة\[em]تُرجع إدخالاً واحدًا لكل واجهة، وليس لكل عنوان. هذا يعني أن \fIifa_addr\fP والحقول الأخرى يمكن أن تكون NULL فعليًا إذا لم يكن للواجهة عنوان، ولا يُرجع عنوان مستوى الارتباط إذا كانت الواجهة تحتوي على عنوان IP مُخصص. أيضًا، تختلف طريقة اختيار إما \fIifa_broadaddr\fP أو \fIifa_dstaddr\fP على الأنظمة المختلفة. .P ظهرت \fBgetifaddrs\fP() لأول مرة في glibc 2.3، ولكن قبل glibc 2.3.3، دعم التنفيذ عناوين IPv4 فقط؛ أُضيف دعم IPv6 في glibc 2.3.3. دعم عائلات العناوين غير IPv4 متاح فقط على النوى التي تدعم netlink. .SH ملاحظات العناوين التي تُرجع على لينكس ستكون عادةً عناوين IPv4 و IPv6 المُخصصة للواجهة، ولكن أيضًا عنوان \fBAF_PACKET\fP واحد لكل واجهة يحتوي على تفاصيل منخفضة المستوى حول الواجهة وطبقتها المادية. في هذه الحالة، قد يحتوي الحقل \fIifa_data\fP على مؤشر إلى \fIstruct rtnl_link_stats\fP، المُعرَّف في \fI\fP (في لينكس 2.4 والإصدارات الأقدم، \fIstruct net_device_stats\fP، المُعرَّف في \fI\fP)، والذي يحتوي على سمات وإحصائيات واجهة متنوعة. .SH أمثلة البرنامج أدناه يوضح استخدام \fBgetifaddrs\fP() و \fBfreeifaddrs\fP() و \fBgetnameinfo\fP(3). إليك ما نراه عند تشغيل هذا البرنامج على أحد الأنظمة: .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 "مصدر البرنامج" \& .EX #define _GNU_SOURCE /* To get defns of NI_MAXSERV and 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); } \& /* Walk through linked list, maintaining head pointer so we can free list later. */ \& for (struct ifaddrs *ifa = ifaddr; ifa != NULL; ifa = ifa\->ifa_next) { if (ifa\->ifa_addr == NULL) continue; \& family = ifa\->ifa_addr\->sa_family; \& /* Display interface name and family (including symbolic form of the latter for the common families). */ \& 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); \& /* For an AF_INET* interface address, display the address. */ \& 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() failed: %s\[rs]n", gai_strerror(s)); exit(EXIT_FAILURE); } \& printf("\[rs]t\[rs]taddress: <%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 "انظر أيضًا" \fBbind\fP(2), \fBgetsockname\fP(2), \fBsocket\fP(2), \fBpacket\fP(7), \fBifconfig\fP(8) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .