inet(3)

الاسم
inet_aton, inet_addr, inet_network, inet_ntoa, inet_makeaddr, inet_lnaof, inet_netof - دوال التعامل مع عناوين الإنترنت

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int inet_aton(const char *cp, struct in_addr *inp);

in_addr_t inet_addr(const char *cp);
in_addr_t inet_network(const char *cp);

[[deprecated]] char *inet_ntoa(struct in_addr in);

[[deprecated]] struct in_addr inet_makeaddr(in_addr_t net,
                                            in_addr_t host);

[[deprecated]] in_addr_t inet_lnaof(struct in_addr in);
[[deprecated]] in_addr_t inet_netof(struct in_addr in);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

inet_aton(), inet_ntoa():
    منذ glibc 2.19:
        _DEFAULT_SOURCE
    في glibc حتى 2.19 (بما في ذلك 2.19):
        _BSD_SOURCE || _BSD_SOURCE

الوصف
تحوِّل الدالة inet_aton() عنوان المضيف cp من ترميز IPv4 بالأرقام والنقاط إلى شكل ثنائي (بترتيب بايتات الشبكة) وتخزِّنه في البنية التي يشير إليها inp. تُرجع inet_aton() قيمة غير صفرية إذا كان العنوان صحيحًا، وصفرًا إن لم يكن. يمكن أن يكون العنوان المُقدَّم في cp بأحد الأشكال التالية:

a.b.c.d
    يحدد كل جزء عددي من الأجزاء الأربعة بايتًا من العنوان؛ تُسند البايتات بترتيب من اليسار إلى اليمين لإنتاج العنوان الثنائي.

a.b.c
    يحدد الجزآن a و b أول بايتين من العنوان الثنائي. يُفسَّر الجزء c كقيمة 16 بت تُعرِّف البايتين الأيمنين من العنوان الثنائي. هذا الترميز مناسب لتحديد عناوين الشبكة من الفئة B (القديمة).

a.b يحدد الجزء a أول بايت من العنوان الثنائي. يُفسَّر الجزء b كقيمة 24 بت تُعرِّف البايتات الثلاث الأيمن من العنوان الثنائي. هذا الترميز مناسب لتحديد عناوين الشبكة من الفئة A (القديمة).

a   تُفسَّر القيمة a كقيمة 32 بت تُخزَّن مباشرة في العنوان الثنائي دون أي إعادة ترتيب للبايتات.

في جميع الأشكال أعلاه، يمكن تحديد مكونات العنوان المنقوط بالعدد العشري، أو الثماني (ببادئة 0)، أو السداسي عشري (ببادئة 0X). تُسمى العناوين بأي من هذه الأشكال مجتمعة ترميز IPv4 بالأرقام والنقاط. يُشار إلى الشكل الذي يستخدم أربعة أعداد عشرية بالضبط باسم ترميز IPv4 العشري المنقوط (أو أحيانًا: ترميز IPv4 الرباعي المنقوط).

تُرجع inet_aton() 1 إذا فُسِّرت السلسلة المُقدَّمة بنجاح، أو 0 إذا كانت السلسلة غير صالحة (لا يُعيَّن errno عند الخطأ).

تحوِّل الدالة inet_addr() عنوان المضيف cp من ترميز IPv4 بالأرقام والنقاط إلى بيانات ثنائية بترتيب بايتات الشبكة. إذا كان الإدخال غير صالح، تُرجع INADDR_NONE (عادةً -1). استخدام هذه الدالة إشكالي لأن -1 هو عنوان صالح (255.255.255.255). تجنب استخدامها لصالح inet_aton() أو inet_pton(3) أو getaddrinfo(3)، التي توفر طريقة أنظف للإشارة إلى خطأ الإرجاع.

تحوِّل الدالة inet_network() cp، وهي سلسلة محارف بترميز IPv4 للأرقام والنقاط، إلى رقم بترتيب بايتات المضيف مناسب للاستخدام كعنوان شبكة إنترنت. عند النجاح، يُعاد العنوان المُحوَّل. إذا كان المُدخل غير صالح، يُعاد -1.

تحوِّل الدالة inet_ntoa() عنوان مضيف الإنترنت in، المُعطى بترتيب بايتات الشبكة، إلى سلسلة محارف بترميز IPv4 العشري المنقوط. تُعاد السلسلة في مخزن مؤقت مُخصص بشكل ثابت، ستستبدله الاستدعاءات اللاحقة.

تُعيد الدالة inet_lnaof() جزء عنوان الشبكة المحلية من عنوان الإنترنت in. القيمة المُعادة بترتيب بايتات المضيف.

تُعيد الدالة inet_netof() جزء رقم الشبكة من عنوان الإنترنت in. القيمة المُعادة بترتيب بايتات المضيف.

الدالة inet_makeaddr() هي عكس inet_netof() و inet_lnaof(). تُعيد عنوان مضيف إنترنت بترتيب بايتات الشبكة، مُنشأ بدمج رقم الشبكة net مع العنوان المحلي host، وكلاهما بترتيب بايتات المضيف.

الهيكل in_addr المُستخدم في inet_ntoa()، inet_makeaddr()، inet_lnaof()، و inet_netof() مُعرَّف في <netinet/in.h> كالتالي:

    typedef uint32_t in_addr_t;

    struct in_addr {
        in_addr_t s_addr;
    };

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
inet_aton(), inet_addr(), inet_network(), inet_ntoa() | سلامة الخيوط | المنطقة (locale) آمنة لتعدد المسالك (MT-Safe)
inet_makeaddr(), inet_lnaof(), inet_netof() | سلامة الخيوط | MT-Safe

المعايير

inet_addr()
inet_ntoa()
    POSIX.1-2008.

inet_aton()
    لا شيء.

المعايير

inet_addr()
inet_ntoa()
    POSIX.1-2001، 4.3BSD.

inet_lnaof()، inet_netof()، و inet_makeaddr() دوال قديمة تفترض أنها تتعامل مع عناوين شبكة صفية. تُقسِّم الشبكات الصفية عناوين شبكة IPv4 إلى مكونات مضيف وشبكة عند حدود البايتات، كالتالي:

الفئة A
    يُشار إلى هذا النوع من العناوين بالقيمة 0 في البت الأكثر أهمية من العنوان (بترتيب بايتات الشبكة). يُحتوى عنوان الشبكة في البايت الأكثر أهمية، ويشغل عنوان المضيف البايتات الثلاثة المتبقية.

الفئة B
    يُشار إلى هذا النوع من العناوين بالقيمة الثنائية 10 في البتَّين الأكثر أهمية من العنوان. يُحتوى عنوان الشبكة في البايتَين الأكثر أهمية، ويشغل عنوان المضيف البايتَين المتبقيَين.

الفئة C
    يُشار إلى هذا النوع من العناوين بالقيمة الثنائية 110 في البتات الثلاث الأكثر أهمية من العنوان. يُحتوى عنوان الشبكة في البايتات الثلاث الأكثر أهمية، ويشغل عنوان المضيف البايت المتبقي.

عناوين الشبكات الطبقية أصبحت الآن مهملة، حيث حُل محلها التوجيه بين النطاقات غير الطبقي (CIDR)، الذي يقسم العناوين إلى مكونات الشبكة والمضيف عند حدود بتات عشوائية (بدلاً من البايتات).

ملاحظات
في معماريات x86، ترتيب بايتات المضيف هو البايت الأقل دلالة أولاً (النظام الصغير)، بينما ترتيب بايتات الشبكة، كما يُستخدم على الإنترنت، هو البايت الأكثر دلالة أولاً (النظام الكبير).

أمثلة
مثال على استخدام inet_aton() و inet_ntoa() موضح أدناه. فيما يلي بعض عمليات التشغيل المثال:

    $ ./a.out 226.000.000.037      # Last byte is in octal
    226.0.0.31
    $ ./a.out 0x7f.1               # First byte is in hex
    127.0.0.1

  مصدر البرنامج
    #define _DEFAULT_SOURCE
    #include <arpa/inet.h>
    #include <stdio.h>
    #include <stdlib.h>

    int
    main(int argc, char *argv[])
    {
        struct in_addr addr;

        if (argc != 2) {
            fprintf(stderr, "%s <dotted-address>\n", argv[0]);
            exit(EXIT_FAILURE);
        }

        if (inet_aton(argv[1], &addr) == 0) {
            fprintf(stderr, "Invalid address\n");
            exit(EXIT_FAILURE);
        }

        printf("%s\n", inet_ntoa(addr));
        exit(EXIT_SUCCESS);
    }

انظر أيضًا
byteorder(3), getaddrinfo(3), gethostbyname(3), getnameinfo(3), getnetent(3), inet_net_pton(3), inet_ntop(3), inet_pton(3), hosts(5), networks(5)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.