rtime(3)

الاسم
rtime - الحصول على الوقت من جهاز بعيد

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

موجز
#include <rpc/auth_des.h>

int rtime(struct sockaddr_in *addrp, struct rpc_timeval *timep,
          struct rpc_timeval *timeout);

الوصف
تستخدم هذه الدالة بروتوكول مخدم الوقت كما هو موصوف في RFC 868 للحصول على الوقت من جهاز بعيد.

يعطي بروتوكول مخدم الوقت الوقت بالثواني منذ 00:00:00 UTC، 1 يناير 1900، وتطرح هذه الدالة الثابت المناسب لتحويل النتيجة إلى ثوانٍ منذ الحقبة، 1970-01-01 00:00:00 +0000 (UTC).

عندما يكون timeout غير NULL، يُستخدم مقبس udp/time (المنفذ 37). وإلا، يُستخدم مقبس tcp/time (المنفذ 37).

قيمة الإرجاع
عند النجاح، يُعاد 0، وتُخزَّن قيمة الوقت 32-بت التي تم الحصول عليها في timep->tv_sec. في حالة الخطأ، يُعاد -1، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء
يمكن أن تحدث جميع أخطاء الدوال الأساسية (sendto(2)، poll(2)، recvfrom(2)، connect(2)، read(2)). بالإضافة إلى ذلك:

EIO عدد البايتات المُعادة ليس 4.

ETIMEDOUT
    انتهى وقت الانتظار كما هو مُعرَّف في timeout.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
rtime() | سلامة الخيوط | MT-Safe

ملاحظات
يُدعم IPv4 فقط.

تدعم بعض إصدارات in.timed TCP فقط. جرب البرنامج المثال مع ضبط use_tcp إلى 1.

العلل
لا تعمل rtime() في glibc 2.2.5 والإصدارات الأقدم بشكل صحيح على الأجهزة 64-بت.

أمثلة
يتطلب هذا المثال أن يكون المنفذ 37 قيد التشغيل ومفتوحًا. يمكنك التحقق من أن إدخال الوقت داخل /etc/inetd.conf ليس معلقًا.

يتصل البرنامج بجهاز يُدعى "linux". لا يعمل استخدام "localhost". النتيجة هي التوقيت المحلي للجهاز "linux".

    #include <errno.h>
    #include <netdb.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>

    #include <rpc/auth_des.h>

    static int use_tcp = 0;
    static const char servername[] = "linux";

    int
    main(void)
    {
        int                 ret;
        time_t              t;
        struct hostent      *hent;
        struct rpc_timeval  time1 = {0, 0};
        struct rpc_timeval  timeout = {1, 0};
        struct sockaddr_in  name;

        memset(&name, 0, sizeof(name));
        sethostent(1);
        hent = gethostbyname(servername);
        memcpy(&name.sin_addr, hent->h_addr, hent->h_length);

        ret = rtime(&name, &time1, use_tcp ? NULL : &timeout);
        if (ret < 0)
            perror("rtime error");
        else {
            t = time1.tv_sec;
            printf("%s\n", ctime(&t));
        }

        exit(EXIT_SUCCESS);
    }

انظر أيضًا
ntpdate(1), inetd(8)

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

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

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