.\" -*- coding: UTF-8 -*- '\" t .\" Copyright, the authors of the Linux man-pages project .\" .\" %%%LICENSE_START(BSD_ONELINE_CDROM) .\" This page was taken from the 4.4BSD-Lite CDROM (BSD license) .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH rpc 3 "21 سبتمبر 2025" "صفحات دليل لينكس 6.18" .SH الاسم rpc \- دوال المكتبة لاستدعاءات الإجراءات عن بُعد .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH "الملخص والوصف" .\" .P .\" We don't have an rpc_secure.3 page at the moment -- MTK, 19 Sep 05 .\" Routines that are used for Secure RPC (DES authentication) are described in .\" .BR rpc_secure (3). .\" Secure RPC can be used only if DES encryption is available. تسمح هذه الدوال لبرامج C بإجراء استدعاءات إجراءات على أجهزة أخرى عبر الشبكة. أولاً، يستدعي العميل إجراءً لإرسال حزمة بيانات إلى الخادم. عند استلام الحزمة، يستدعي الخادم روتين توزيع لتنفيذ الخدمة المطلوبة، ثم يرسل ردًا. أخيرًا، يعود استدعاء الإجراء إلى العميل. .P لاستخدام هذه الدوال، ضمّن ملف الرأس \fI\fP. .P تستخدم النماذج الأولية أدناه الأنواع التالية: .P .RS 4 .EX \fBtypedef int \fP\fIbool_t\fP\fB;\fP .P \fBtypedef typeof(bool_t (XDR *, void *, ...)) *\fP\fIxdrproc_t\fP\fB;\fP .P \fBtypedef typeof(bool_t (caddr_t \fP\fIresp\fP\fB, struct sockaddr_in *\fP\fIraddr\fP\fB)\fP \fB *\fP\fIresultproc_t\fP\fB;\fP .EE .RE .P انظر ملفات الرأس لتصريحات الأنواع \fIAUTH\fP و \fICLIENT\fP و \fISVCXPRT\fP و \fIXDR\fP. .P .nf \fBvoid auth_destroy(AUTH *\fP\fIauth\fP\fB);\fP .fi .IP ماكرو يُدمر معلومات الاستيثاق المرتبطة بـ \fIauth\fP. يتضمن التدمير عادةً تحرير هياكل البيانات الخاصة. استخدام \fIauth\fP غير محدد بعد استدعاء \fBauth_destroy\fP(). .P .nf \fBAUTH *authnone_create(void);\fP .fi .IP تنشئ وتُعيد مقبض استيثاق RPC يمرر معلومات استيثاق غير قابلة للاستخدام مع كل استدعاء إجراء عن بُعد. هذا هو الاستيثاق المبدئي المستخدم بواسطة RPC. .P .nf \fBAUTH *authunix_create(char *\fP\fIhost\fP\fB, uid_t \fP\fIuid\fP\fB, gid_t \fP\fIgid\fP\fB,\fP \fB int \fP\fIn\fP\fB, gid_t \fP\fIaup_gids\fP\fB[\fP\fIn\fP\fB]);\fP .fi .IP تنشئ وتُعيد مقبض استيثاق RPC يحتوي على معلومات استيثاق. المعامل \fIhost\fP هو اسم الجهاز الذي أُنشئت عليه المعلومات؛ \fIuid\fP هو معرف المستخدم؛ \fIgid\fP هو معرف المجموعة الحالي للمستخدم؛ \fIn\fP و \fIaup_gids\fP يشيران إلى مصفوفة معدودة من المجموعات التي ينتمي إليها المستخدم. من السهل انتحال شخصية مستخدم. .P .nf \fBAUTH *authunix_create_default(void);\fP .fi .IP تستدعي \fBauthunix_create\fP() مع المعاملات المناسبة. .P .nf \fBint callrpc(char *\fP\fIhost\fP\fB, unsigned long \fP\fIprognum\fP\fB,\fP \fB unsigned long \fP\fIversnum\fP\fB, unsigned long \fP\fIprocnum\fP\fB,\fP \fB xdrproc_t \fP\fIinproc\fP\fB, const char *\fP\fIin\fP\fB,\fP \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB);\fP .fi .IP استدعِ الإجراء عن بُعد المرتبط بـ \fIprognum\fP و \fIversnum\fP و \fIprocnum\fP على الجهاز \fIhost\fP. المعامل \fIin\fP هو عنوان وسيطات الإجراء، و \fIout\fP هو عنوان مكان وضع النتائج؛ يُستخدم \fIinproc\fP لترميز معاملات الإجراء، ويُستخدم \fIoutproc\fP لفك ترميز نتائج الإجراء. يُعيد هذا الروتين صفرًا إذا نجح، أو قيمة \fBenum clnt_stat\fP محولة إلى عدد صحيح إذا فشل. الروتين \fBclnt_perrno\fP() مفيد لترجمة حالات الفشل إلى رسائل. .IP تحذير: استدعاء الإجراءات عن بُعد بهذا الروتين يستخدم UDP/IP كناقل؛ انظر \fBclntudp_create\fP() للقيود. ليس لديك تحكم في المهلات أو الاستيثاق باستخدام هذا الروتين. .P .nf \fBenum clnt_stat clnt_broadcast(unsigned long \fP\fIprognum\fP\fB,\fP \fB unsigned long \fP\fIversnum\fP\fB, unsigned long \fP\fIprocnum\fP\fB,\fP \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB,\fP \fB resultproc_t \fP\fIeachresult\fP\fB);\fP .fi .IP مثل \fBcallrpc\fP()، باستثناء أن رسالة الاستدعاء تُبث إلى جميع شبكات البث المتصلة محليًا. في كل مرة يستلم فيها استجابة، يستدعي هذا الروتين \fBeachresult\fP()، الذي شكله: .IP .in +4n .EX \fBeachresult(char *\fP\fIout\fP\fB, struct sockaddr_in *\fP\fIaddr\fP\fB);\fP .EE .in .IP حيث \fIout\fP هو نفس \fIout\fP المُمرَّر إلى \fBclnt_broadcast\fP()، باستثناء أن مخرجات الإجراء البعيد تُفك ترميزها هناك؛ \fIaddr\fP يُشير إلى عنوان الآلة التي أرسلت النتائج. إذا أعادت \fBeachresult\fP() صفرًا، تنتظر \fBclnt_broadcast()\fP ردودًا إضافية؛ وإلا فإنها تعود بحالة مناسبة. .IP تحذير: مقابس البث محدودة الحجم بأقصى وحدة نقل لرابط البيانات. للإيثرنت، هذه القيمة هي 1500 بايت. .P .nf \fBenum clnt_stat clnt_call(CLIENT *\fP\fIclnt\fP\fB, unsigned long \fP\fIprocnum\fP\fB,\fP \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB,\fP \fB struct timeval \fP\fItout\fP\fB);\fP .fi .IP كليّة تستدعي الإجراء البعيد \fIprocnum\fP المرتبط بمقبض العميل \fIclnt\fP، الذي يُحصل عليه بإجراء إنشاء عميل RPC مثل \fBclnt_create\fP(). المعامل \fIin\fP هو عنوان وسيط (وسائط) الإجراء، و\fIout\fP هو عنوان مكان وضع النتيجة (النتائج)؛ يُستخدم \fIinproc\fP لترميز معاملات الإجراء، ويُستخدم \fIoutproc\fP لفك ترميز نتائج الإجراء؛ \fItout\fP هو الوقت المسموح به لعودة النتائج. .P .nf \fBclnt_destroy(CLIENT *\fP\fIclnt\fP\fB);\fP .fi .IP كليّة تُدمر مقبض RPC للعميل. يتضمن التدمير عادةً تحرير هياكل بيانات خاصة، بما في ذلك \fIclnt\fP نفسه. استخدام \fIclnt\fP غير مُحدد بعد استدعاء \fBclnt_destroy\fP(). إذا فتحت مكتبة RPC المقبس المرتبط، فإنها تُغلقه أيضًا. وإلا، يبقى المقبس مفتوحًا. .P .nf \fBCLIENT *clnt_create(const char *\fP\fIhost\fP\fB, unsigned long \fP\fIprog\fP\fB,\fP \fB unsigned long \fP\fIvers\fP\fB, const char *\fP\fIproto\fP\fB);\fP .fi .IP إجراء إنشاء عميل عام. يُعرِّف \fIhost\fP اسم المضيف البعيد حيث يوجد الخادم. يُشير \fIproto\fP إلى نوع بروتوكول النقل المراد استخدامه. القيم المدعومة حاليًا لهذا الحقل هي \[lq]udp\[rq] و\[lq]tcp\[rq]. تُضبط مهلات مبدئية، ولكن يمكن تعديلها باستخدام \fBclnt_control\fP(). .IP تحذير: استخدام UDP له عيوبه. نظرًا لأن رسائل RPC القائمة على UDP يمكنها حمل ما يصل إلى 8 كيلوبايت فقط من البيانات المُرمَّزة، لا يمكن استخدام هذا النقل للإجراءات التي تأخذ وسائط كبيرة أو تُرجع نتائج ضخمة. .P .nf \fBbool_t clnt_control(CLIENT *\fP\fIcl\fP\fB, int \fP\fIreq\fP\fB, char *\fP\fIinfo\fP\fB);\fP .fi .IP كليّة تُستخدم لتغيير أو استرجاع معلومات متنوعة حول كائن عميل. يُشير \fIreq\fP إلى نوع العملية، و\fIinfo\fP هو مؤشر للمعلومات. لكل من UDP وTCP، القيم المدعومة لـ \fIreq\fP وأنواع وسائطها وما تفعله هي: .IP .in +4n .EX \f[B]CLSET_TIMEOUT\fR \f[I]struct timeval\fR // تعيين على مجموعة المهل \f[B]CLGET_TIMEOUT\fR \f[I]struct timeval\fR // الحصول مجموعة المهل .EE .in .IP ملاحظة: إذا ضبطت المهلة باستخدام \fBclnt_control\fP()، فإن معامل المهلة المُمرَّر إلى \fBclnt_call\fP() سيُتجاهل في جميع الاستدعاءات المستقبلية. .IP .in +4n .EX \f[B]CLGET_SERVER_ADDR\fR \f[I]struct sockaddr_in\fR // get server\[aq]s address .EE .in .IP العمليات التالية صالحة لـ UDP فقط: .IP .in +4n .EX \f[B]CLSET_RETRY_TIMEOUT\fR \f[I]struct timeval\fR // set the retry timeout \f[B]CLGET_RETRY_TIMEOUT\fR \f[I]struct timeval\fR // get the retry timeout .EE .in .IP مهلة إعادة المحاولة هي الوقت الذي ينتظره "UDP RPC" رد الخادم قبل إعادة إرسال الطلب. .P .nf \fBclnt_freeres(CLIENT * \fP\fIclnt\fP\fB, xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB);\fP .fi .IP كليّة تُحرر أي بيانات خصصها نظام RPC/XDR عندما فك ترميز نتائج استدعاء RPC. المعامل \fIout\fP هو عنوان النتائج، و\fIoutproc\fP هو إجراء XDR الذي يصف النتائج. يُرجع هذا الإجراء واحدًا إذا حُررت النتائج بنجاح، وصفرًا بخلاف ذلك. .P .nf \fBvoid clnt_geterr(CLIENT *\fP\fIclnt\fP\fB, struct rpc_err *\fP\fIerrp\fP\fB);\fP .fi .IP وِحدةٌ ماكرو تنسخ بنية الخطأ من مقبض العميل إلى البنية الموجودة في العنوان \fIerrp\fP. .P .nf \fBvoid clnt_pcreateerror(const char *\fP\fIs\fP\fB);\fP .fi .IP اطبع رسالة إلى الخطأ المعياري توضح سبب عدم إنشاء مقبض عميل RPC. تُسبق الرسالة بسلسلة المحارف \fIs\fP ونقطتين رأسيتين. تُستخدم عندما تفشل استدعاءات \fBclnt_create\fP() أو \fBclntraw_create\fP() أو \fBclnttcp_create\fP() أو \fBclntudp_create\fP(). .P .nf \fBvoid clnt_perrno(enum clnt_stat \fP\fIstat\fP\fB);\fP .fi .IP اطبع رسالة إلى الخطأ المعياري تتوافق مع الحالة المشار إليها بواسطة \fIstat\fP. تُستخدم بعد \fBcallrpc\fP(). .P .nf \fBclnt_perror(CLIENT *\fP\fIclnt\fP\fB, const char *\fP\fIs\fP\fB);\fP .fi .IP اطبع رسالة إلى الخطأ المعياري توضح سبب فشل استدعاء RPC؛ \fIclnt\fP هو المقبض المستخدم لإجراء الاستدعاء. تُسبق الرسالة بسلسلة المحارف \fIs\fP ونقطتين رأسيتين. تُستخدم بعد \fBclnt_call\fP(). .P .nf \fBchar *clnt_spcreateerror(const char *\fP\fIs\fP\fB);\fP .fi .IP مثل \fBclnt_pcreateerror\fP()، باستثناء أنها تُرجع سلسلة محارف بدلاً من الطباعة إلى الخطأ المعياري. .IP أخطاء: تُرجع مؤشرًا إلى بيانات ثابتة يُستبدل في كل استدعاء. .P .nf \fBchar *clnt_sperrno(enum clnt_stat \fP\fIstat\fP\fB);\fP .fi .IP تأخذ نفس المعاملات مثل \fBclnt_perrno\fP()، ولكن بدلاً من إرسال رسالة إلى الخطأ المعياري توضح سبب فشل استدعاء RPC، تُرجع مؤشرًا إلى سلسلة محارف تحتوي على الرسالة. تنتهي السلسلة بحرف سطر جديد. .IP تُستخدم \fBclnt_sperrno\fP() بدلاً من \fBclnt_perrno\fP() إذا لم يكن للبرنامج خطأ معياري (كما هو الحال غالبًا مع برنامج يعمل كخادم)، أو إذا لم يرغب المبرمج في إخراج الرسالة باستخدام \fBprintf\fP(3)، أو إذا كان سيُستخدم تنسيق رسالة مختلف عن ذلك الذي تدعمه \fBclnt_perrno\fP(). ملاحظة: على عكس \fBclnt_sperror\fP() و\fBclnt_spcreateerror\fP()، تُرجع \fBclnt_sperrno\fP() مؤشرًا إلى بيانات ثابتة، ولكن النتيجة لن تُستبدل في كل استدعاء. .P .nf \fBchar *clnt_sperror(CLIENT *\fP\fIrpch\fP\fB, const char *\fP\fIs\fP\fB);\fP .fi .IP مثل \fBclnt_perror\fP()، باستثناء أنها (مثل \fBclnt_sperrno\fP()) تُرجع سلسلة محارف بدلاً من الطباعة إلى الخطأ المعياري. .IP أخطاء: تُرجع مؤشرًا إلى بيانات ثابتة يُستبدل في كل استدعاء. .P .nf \fBCLIENT *clntraw_create(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB);\fP .fi .IP تنشئ هذه الدالة عميل RPC تجريبيًا للبرنامج البعيد \fIprognum\fP، الإصدار \fIversnum\fP. وسيلة النقل المستخدمة لتمرير الرسائل إلى الخدمة هي في الواقع مخزن مؤقت داخل مساحة عنوان العملية، لذا يجب أن يعيش خادم RPC المقابل في نفس مساحة العنوان؛ انظر \fBsvcraw_create\fP(). يسمح هذا بمحاكاة RPC والحصول على تكاليف RPC، مثل أوقات الرحلة ذهابًا وإيابًا، دون أي تدخل من النواة. تُرجع هذه الدالة NULL إذا فشلت. .P .nf \fBCLIENT *clnttcp_create(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP \fB int *\fP\fIsockp\fP\fB, unsigned int \fP\fIsendsz\fP\fB, unsigned int \fP\fIrecvsz\fP\fB);\fP .fi .IP .\"The following inline font conversion is necessary for the hyphen indicator تنشئ هذه الدالة عميل RPC للبرنامج البعيد \fIprognum\fP، الإصدار \fIversnum\fP؛ يستخدم العميل TCP/IP كوسيلة نقل. يقع البرنامج البعيد في عنوان الإنترنت \fI*addr\fP. إذا كان \fIaddr\->sin_port\fP صفرًا، فإنه يُضبط على المنفذ الفعلي الذي يستمع عليه البرنامج البعيد (يُستشار خدمة \fBportmap\fP البعيدة لهذه المعلومات). المعامل \fIsockp\fP هو مقبس؛ إذا كان \fBRPC_ANYSOCK\fP، فإن هذه الدالة تفتح مقبسًا جديدًا وتضبط \fIsockp\fP. نظرًا لأن RPC القائم على TCP يستخدم الإدخال/الإخراج المُخزَّن، يمكن للمستخدم تحديد حجم المخازن المؤقتة للإرسال والاستقبال باستخدام المعاملين \fIsendsz\fP و\fIrecvsz\fP؛ القيم الصفرية تختار مبدئيًا قيمًا مناسبة. تُرجع هذه الدالة NULL إذا فشلت. .P .nf \fBCLIENT *clntudp_create(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP \fB struct timeval \fP\fIwait\fP\fB, int *\fP\fIsockp\fP\fB);\fP .fi .IP تنشئ هذه الروتين عميل RPC للبرنامج البعيد \fIprognum\fP، الإصدار \fIversnum\fP؛ يستخدم العميل UDP/IP كوسيلة نقل. يقع البرنامج البعيد على عنوان الإنترنت \fIaddr\fP. إذا كان \fIaddr\->sin_port\fP صفرًا، فسيُضبط على المنفذ الفعلي الذي يستمع عليه البرنامج البعيد (يُستشار خدمة \fBportmap\fP البعيدة لهذه المعلومة). المعامل \fIsockp\fP هو مقبس؛ إذا كان \fBRPC_ANYSOCK\fP، فإن هذا الروتين يفتح مقبسًا جديدًا ويضبط \fIsockp\fP. يعيد نقل UDP إرسال رسالة الاستدعاء على فترات زمنية \fIwait\fP حتى تُستلم استجابة أو حتى ينتهي وقت الاستدعاء. يُحدد الوقت الإجمالي لانتهاء وقت الاستدعاء بواسطة \fBclnt_call\fP(). .IP تحذير: نظرًا لأن رسائل RPC القائمة على UDP يمكنها حمل ما يصل إلى 8 كيلوبايت فقط من البيانات المُرمَّزة، فلا يمكن استخدام وسيلة النقل هذه للإجراءات التي تأخذ وسائط كبيرة أو تُرجع نتائج ضخمة. .P .nf \fBCLIENT *clntudp_bufcreate(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP \fB struct timeval \fP\fIwait\fP\fB, int *\fP\fIsockp\fP\fB,\fP \fB unsigned int \fP\fIsendsize\fP\fB, unsigned int \fP\fIrecosize\fP\fB);\fP .fi .IP تنشئ هذه الروتين عميل RPC للبرنامج البعيد \fIprognum\fP، على \fIversnum\fP؛ يستخدم العميل UDP/IP كوسيلة نقل. يقع البرنامج البعيد على عنوان الإنترنت \fIaddr\fP. إذا كان \fIaddr\->sin_port\fP صفرًا، فسيُضبط على المنفذ الفعلي الذي يستمع عليه البرنامج البعيد (يُستشار خدمة \fBportmap\fP البعيدة لهذه المعلومة). المعامل \fIsockp\fP هو مقبس؛ إذا كان \fBRPC_ANYSOCK\fP، فإن هذا الروتين يفتح مقبسًا جديدًا ويضبط \fIsockp\fP. يعيد نقل UDP إرسال رسالة الاستدعاء على فترات زمنية \fIwait\fP حتى تُستلم استجابة أو حتى ينتهي وقت الاستدعاء. يُحدد الوقت الإجمالي لانتهاء وقت الاستدعاء بواسطة \fBclnt_call\fP(). .IP يسمح هذا للمستخدم بتحديد الحجم الأقصى للحزمة لإرسال واستقبال رسائل RPC القائمة على UDP. .P .nf \fBvoid get_myaddress(struct sockaddr_in *\fP\fIaddr\fP\fB);\fP .fi .IP يُدخل عنوان IP للجهاز في \fI*addr\fP، دون استشارة دوال المكتبة التي تتعامل مع \fI/etc/hosts\fP. يُضبط رقم المنفذ دائمًا على \fBhtons(PMAPPORT)\fP. .P .nf \fBstruct pmaplist *pmap_getmaps(struct sockaddr_in *\fP\fIaddr\fP\fB);\fP .fi .IP واجهة مستخدم لخدمة \fBportmap\fP، تُرجع قائمة بتعيينات برنامج RPC الحالية إلى المنفذ على المضيف الواقع على عنوان IP \fI*addr\fP. يمكن لهذا الروتين إرجاع NULL. يستخدم الأمر \fIrpcinfo\ \-p\fP هذا الروتين. .P .nf \fBunsigned short pmap_getport(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP \fB unsigned int \fP\fIprotocol\fP\fB);\fP .fi .IP واجهة مستخدم لخدمة \fBportmap\fP، تُرجع رقم المنفذ الذي ينتظر عليه خدمة تدعم رقم البرنامج \fIprognum\fP، الإصدار \fIversnum\fP، وتتحدث بروتوكول النقل المرتبط بـ \fIprotocol\fP. من المرجح أن تكون قيمة \fIprotocol\fP هي \fBIPPROTO_UDP\fP أو \fBIPPROTO_TCP\fP. تعني قيمة الإرجاع صفر أن التعيين غير موجود أو أن نظام RPC فشل في الاتصال بخدمة \fBportmap\fP البعيدة. في الحالة الأخيرة، يحتوي المتغير العام \fIrpc_createerr\fP على حالة RPC. .P .nf \fBenum clnt_stat pmap_rmtcall(struct sockaddr_in *\fP\fIaddr\fP\fB,\fP \fB unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP \fB unsigned long \fP\fIprocnum\fP\fB,\fP \fB xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB,\fP \fB xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB,\fP \fB struct timeval \fP\fItout\fP\fB, unsigned long *\fP\fIportp\fP\fB);\fP .fi .IP واجهة مستخدم لخدمة \fBportmap\fP، تُوجّه \fBportmap\fP على المضيف الواقع على عنوان IP \fI*addr\fP لإجراء استدعاء RPC نيابة عنك إلى إجراء على ذلك المضيف. سيُعدّل المعامل \fI*portp\fP إلى رقم منفذ البرنامج إذا نجح الإجراء. تُناقش تعريفات المعاملات الأخرى في \fBcallrpc\fP() و \fBclnt_call\fP(). يجب استخدام هذا الإجراء لـ \[lq]ping\[rq] فقط ولا شيء غيره. انظر أيضًا \fBclnt_broadcast\fP(). .P .nf \fBbool_t pmap_set(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP \fB int \fP\fIprotocol\fP\fB, unsigned short \fP\fIport\fP\fB);\fP .fi .IP واجهة مستخدم لخدمة \fBportmap\fP، تُنشئ تعيينًا بين الثلاثي [\fIprognum\fP,\fIversnum\fP,\fIprotocol\fP] و \fIport\fP على خدمة \fBportmap\fP للجهاز. من المرجح أن تكون قيمة \fIprotocol\fP هي \fBIPPROTO_UDP\fP أو \fBIPPROTO_TCP\fP. يُرجع هذا الروتين واحدًا إذا نجح، صفرًا بخلاف ذلك. يُنجز آليًا بواسطة \fBsvc_register\fP(). .P .nf \fBbool_t pmap_unset(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB);\fP .fi .IP واجهة مستخدم لخدمة \fBportmap\fP، تُدمر جميع التعيينات بين الثلاثي [\fIprognum\fP,\fIversnum\fP,\fI*\fP] و \fBports\fP على خدمة \fBportmap\fP للجهاز. يُرجع هذا الروتين واحدًا إذا نجح، صفرًا بخلاف ذلك. .P .nf \fBint registerrpc(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB,\fP \fB unsigned long \fP\fIprocnum\fP\fB, typeof(char *(char *)) *\fP\fIprocname\fP\fB,\fP \fB xdrproc_t \fP\fIinproc\fP\fB, xdrproc_t \fP\fIoutproc\fP\fB);\fP .fi .IP يسجّل الإجراء \fIprocname\fP مع حزمة خدمة RPC. إذا وصل طلب للبرنامج \fIprognum\fP، الإصدار \fIversnum\fP، والإجراء \fIprocnum\fP، يُستدعى \fIprocname\fP بمؤشر إلى معاملاته (معاملاته)؛ يجب أن يُرجع \fIprocname\fP مؤشرًا إلى نتائجه الثابتة (نتائجه)؛ يُستخدم \fIinproc\fP لفك ترميز المعاملات بينما يُستخدم \fIoutproc\fP لترميز النتائج. يُرجع هذا الروتين صفرًا إذا نجح التسجيل، \-1 بخلاف ذلك. .IP تحذير: تُوصل الإجراءات البعيدة المسجلة بهذا الشكل باستخدام وسيلة نقل UDP/IP؛ انظر \fBsvcudp_create\fP() للقيود. .P .nf \fBstruct rpc_createerr \fP\fIrpc_createerr\fP\fB;\fP .fi .IP متغير عام تُعيَّن قيمته بواسطة أي روتين إنشاء عميل RPC لا ينجح. استخدم الروتين \fBclnt_pcreateerror\fP() لطباعة سبب الفشل. .P .nf \fBvoid svc_destroy(SVCXPRT *\fP\fIxprt\fP\fB);\fP .fi .IP كليّة تُدمّر مقبض نقل خدمة RPC، \fIxprt\fP. يتضمن التدمير عادةً تحرير بنى البيانات الخاصة، بما في ذلك \fIxprt\fP نفسه. استخدام \fIxprt\fP غير مُعرَّف بعد استدعاء هذا الروتين. .P .nf \fBfd_set \fP\fIsvc_fdset\fP\fB;\fP .fi .IP متغير عام يعكس قناع بت واصف الملف للقراءة من جانب خدمة RPC؛ وهو مناسب كمعامل لاستدعاء النظام \fBselect\fP(2). يهم هذا فقط إذا كان مُنفِّذ الخدمة يعالج الأحداث غير المتزامنة بنفسه، بدلاً من استدعاء \fBsvc_run\fP(). هذا المتغير للقراءة فقط (لا تمرّر عنوانه إلى \fBselect\fP(2)!)، لكنه قد يتغير بعد استدعاءات \fBsvc_getreqset\fP() أو أي روتينات إنشاء. .P .nf \fBint \fP\fIsvc_fds\fP\fB;\fP .fi .IP مشابه لـ \fBsvc_fdset\fP، لكنه محدود بـ 32 واصف ملف. هذه الواجهة أُهملت لصالح \fBsvc_fdset\fP. .P .nf \fBsvc_freeargs(SVCXPRT *\fP\fIxprt\fP\fB, xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB);\fP .fi .IP كليّة تُحرّر أي بيانات خصّصها نظام RPC/XDR عندما فكّك الوسائط لإجراء خدمة باستخدام \fBsvc_getargs\fP(). يُعيد هذا الروتين 1 إذا حُرّرت النتائج بنجاح، وصفرًا بخلاف ذلك. .P .nf \fBsvc_getargs(SVCXPRT *\fP\fIxprt\fP\fB, xdrproc_t \fP\fIinproc\fP\fB, char *\fP\fIin\fP\fB);\fP .fi .IP كليّة تفكّ وسائط طلب RPC المرتبط بمقبض نقل خدمة RPC، \fIxprt\fP. المعامل \fIin\fP هو العنوان الذي ستوضع فيه الوسائط؛ \fIinproc\fP هو روتين XDR المستخدم لفك الوسائط. يُعيد هذا الروتين واحدًا إذا نجح الفك، وصفرًا بخلاف ذلك. .P .nf \fBstruct sockaddr_in *svc_getcaller(SVCXPRT *\fP\fIxprt\fP\fB);\fP .fi .IP الطريقة المعتمدة للحصول على عنوان الشبكة للمُستدعي لإجراء مرتبط بمقبض نقل خدمة RPC، \fIxprt\fP. .P .nf \fBvoid svc_getreqset(fd_set *\fP\fIrdfds\fP\fB);\fP .fi .IP يهتم بهذا الروتين فقط إذا كان مُنفِّذ الخدمة لا يستدعي \fBsvc_run\fP()، بل يُنفّذ معالجة أحداث غير متزامنة مخصصة. يُستدعى عندما يُحدد استدعاء النظام \fBselect\fP(2) أن طلب RPC قد وصل على بعض مقابس RPC؛ \fIrdfds\fP هو قناع بت واصف الملف للقراءة الناتج. يُعيد الروتين عندما تُخدم جميع المقابس المرتبطة بقيمة \fIrdfds\fP. .P .nf \fBvoid svc_getreq(int \fP\fIrdfds\fP\fB);\fP .fi .IP مشابه لـ \fBsvc_getreqset\fP()، لكنه محدود بـ 32 واصف ملف. هذه الواجهة أُهملت لصالح \fBsvc_getreqset\fP(). .P .nf \fBbool_t svc_register(SVCXPRT *\fP\fIxprt\fP\fB, unsigned long \fP\fIprognum\fP\fB,\fP \fB unsigned long \fP\fIversnum\fP\fB,\fP \fB typeof(void (struct svc_req *, SVCXPRT *)) *\fP\fIdispatch\fP\fB,\fP \fB unsigned long \fP\fIprotocol\fP\fB);\fP .fi .IP يربط \fIprognum\fP و \fIversnum\fP بإجراء التوزيع للخدمة، \fIdispatch\fP. إذا كان \fIprotocol\fP صفرًا، لا تُسجَّل الخدمة مع خدمة \fBportmap\fP. إذا كان \fIprotocol\fP غير صفري، يُنشأ تعيين الثلاثي [\fIprognum\fP,\fIversnum\fP,\fIprotocol\fP] إلى \fIxprt\->xp_port\fP مع خدمة \fBportmap\fP المحلية (عمومًا \fIprotocol\fP هو صفر، \fBIPPROTO_UDP\fP أو \fBIPPROTO_TCP\fP). للإجراء \fIdispatch\fP الشكل التالي: .IP .in +4n .EX dispatch(struct svc_req *request, SVCXPRT *xprt); .EE .in .IP الدالة \fBsvc_register\fP() تُرجع واحدًا إذا نجحت، وصفرًا بخلاف ذلك. .P .nf \fBvoid svc_run(void);\fP .fi .IP هذه الدالة لا تعود أبدًا. تنتظر وصول طلبات RPC، وتستدعي إجراء الخدمة المناسب باستخدام \fBsvc_getreq\fP() عند وصول أحدها. عادةً ما تنتظر هذه الدالة عودة استدعاء نظام \fBselect\fP(2). .P .nf \fBbool_t svc_sendreply(SVCXPRT *\fP\fIxprt\fP\fB, xdrproc_t \fP\fIoutproc\fP\fB, char *\fP\fIout\fP\fB);\fP .fi .IP تُستدعى بواسطة دالة توزيع خدمة RPC لإرسال نتائج استدعاء إجراء عن بُعد. المعامل \fIxprt\fP هو مقبض النقل المرتبط بالطلب؛ \fIoutproc\fP هي دالة XDR المستخدمة لترميز النتائج؛ و\fIout\fP هو عنوان النتائج. تُرجع هذه الدالة واحدًا إذا نجحت، صفرًا بخلاف ذلك. .P .nf \fBvoid svc_unregister(unsigned long \fP\fIprognum\fP\fB, unsigned long \fP\fIversnum\fP\fB);\fP .fi .IP أزل كل تعيين للزوج [\fIprognum\fP,\fIversnum\fP] إلى دوال التوزيع، وللثلاثي [\fIprognum\fP,\fIversnum\fP,\fI*\fP] إلى رقم المنفذ. .P .nf \fBvoid svcerr_auth(SVCXPRT *\fP\fIxprt\fP\fB, enum auth_stat \fP\fIwhy\fP\fB);\fP .fi .IP تُستدعى بواسطة دالة توزيع خدمة ترفض تنفيذ استدعاء إجراء عن بُعد بسبب خطأ في الاستيثاق. .P .nf \fBvoid svcerr_decode(SVCXPRT *\fP\fIxprt\fP\fB);\fP .fi .IP تُستدعى بواسطة دالة توزيع خدمة لا تستطيع فك ترميز معاملاتها بنجاح. انظر أيضًا \fBsvc_getargs\fP(). .P .nf \fBvoid svcerr_noproc(SVCXPRT *\fP\fIxprt\fP\fB);\fP .fi .IP تُستدعى بواسطة دالة توزيع خدمة لا تنفذ رقم الإجراء الذي يطلبه المستدعي. .P .nf \fBvoid svcerr_noprog(SVCXPRT *\fP\fIxprt\fP\fB);\fP .fi .IP تُستدعى عندما لا يكون البرنامج المطلوب مسجلاً في حزمة RPC. عادةً لا يحتاج منفذو الخدمة إلى هذه الدالة. .P .nf \fBvoid svcerr_progvers(SVCXPRT *\fP\fIxprt\fP\fB, unsigned long \fP\fIlow_vers\fP\fB,\fP \fB unsigned long \fP\fIhigh_vers\fP\fB);\fP .fi .IP تُستدعى عندما لا يكون الإصدار المطلوب من برنامج مسجلاً في حزمة RPC. عادةً لا يحتاج منفذو الخدمة إلى هذه الدالة. .P .nf \fBvoid svcerr_systemerr(SVCXPRT *\fP\fIxprt\fP\fB);\fP .fi .IP تُستدعى بواسطة دالة توزيع خدمة عندما تكتشف خطأ نظاميًا لا يشمله أي بروتوكول معين. على سبيل المثال، إذا لم تعد الخدمة قادرة على تخصيص تخزين، فقد تستدعي هذه الدالة. .P .nf \fBvoid svcerr_weakauth(SVCXPRT *\fP\fIxprt\fP\fB);\fP .fi .IP تُستدعى بواسطة روتين توزيع الخدمة الذي يرفض تنفيذ استدعاء إجراء بعيد بسبب معاملات استيثاق غير كافية. يستدعي الروتين \fBsvcerr_auth(xprt, AUTH_TOOWEAK)\fP. .P .nf \fBSVCXPRT *svcfd_create(int \fP\fIfd\fP\fB, unsigned int \fP\fIsendsize\fP\fB,\fP \fB unsigned int \fP\fIrecvsize\fP\fB);\fP .fi .IP ينشئ خدمة فوق أي واصف ملف مفتوح. عادةً، يكون واصف الملف هذا مقبسًا موصولًا لبروتوكول دفق مثل TCP. يُشير \fIsendsize\fP و \fIrecvsize\fP إلى أحجام المخازن المؤقتة للإرسال والاستقبال. إذا كانت صفرًا، يُختار مبدئي معقول. .P .nf \fBSVCXPRT *svcraw_create(void);\fP .fi .IP ينشئ هذا الروتين ناقل خدمة RPC تجريبي، ويعيد مؤشرًا إليه. الناقل هو في الواقع خبيئة داخل مساحة عنوان العملية، لذا يجب أن يعيش عميل RPC المقابل في نفس مساحة العنوان؛ انظر \fBclntraw_create\fP(). يسمح هذا الروتين بمحاكاة RPC واكتساب أعباء RPC (مثل أوقات الرحلة ذهابًا وإيابًا)، دون أي تدخل من النواة. يُعيد هذا الروتين NULL إذا فشل. .P .nf \fBSVCXPRT *svctcp_create(int \fP\fIsock\fP\fB, unsigned int \fP\fIsend_buf_size\fP\fB,\fP \fB unsigned int \fP\fIrecv_buf_size\fP\fB);\fP .fi .IP ينشئ هذا الروتين ناقل خدمة RPC قائم على TCP/IP، ويعيد مؤشرًا إليه. يُربط الناقل بالمقبس \fIsock\fP، الذي قد يكون \fBRPC_ANYSOCK\fP، وفي هذه الحالة يُنشأ مقبس جديد. إذا لم يكن المقبس مربوطًا بمنفذ TCP محلي، فإن هذا الروتين يربطه بمنفذ عشوائي. عند الإكمال، \fIxprt\->xp_sock\fP هو واصف مقبس الناقل، و \fIxprt\->xp_port\fP هو رقم منفذ الناقل. يُعيد هذا الروتين NULL إذا فشل. نظرًا لأن RPC القائم على TCP يستخدم الإدخال/الإخراج المُخزَّن، يمكن للمستخدمين تحديد حجم المخازن المؤقتة؛ القيم الصفرية تختار مبدئيات مناسبة. .P .nf \fBSVCXPRT *svcudp_bufcreate(int \fP\fIsock\fP\fB, unsigned int \fP\fIsendsize\fP\fB,\fP \fB unsigned int \fP\fIrecosize\fP\fB);\fP .fi .IP ينشئ هذا الروتين ناقل خدمة RPC قائم على UDP/IP، ويعيد مؤشرًا إليه. يُربط الناقل بالمقبس \fIsock\fP، الذي قد يكون \fBRPC_ANYSOCK\fP، وفي هذه الحالة يُنشأ مقبس جديد. إذا لم يكن المقبس مربوطًا بمنفذ UDP محلي، فإن هذا الروتين يربطه بمنفذ عشوائي. عند الإكمال، \fIxprt\->xp_sock\fP هو واصف مقبس الناقل، و \fIxprt\->xp_port\fP هو رقم منفذ الناقل. يُعيد هذا الروتين NULL إذا فشل. .IP يسمح هذا للمستخدم بتحديد الحجم الأقصى للحزمة لإرسال واستقبال رسائل RPC القائمة على UDP. .P .nf \fBSVCXPRT *svcudp_create(int \fP\fIsock\fP\fB);\fP .fi .IP هذا الاستدعاء مكافئ لـ \fIsvcudp_bufcreate(sock,SZ,SZ)\fP لحجم مبدئي ما \fISZ\fP. .P .nf \fBbool_t xdr_accepted_reply(XDR *\fP\fIxdrs\fP\fB, struct accepted_reply *\fP\fIar\fP\fB);\fP .fi .IP تُستخدم لترميز رسائل رد RPC. هذا الروتين مفيد للمستخدمين الذين يرغبون في توليد رسائل بنمط RPC دون استخدام حزمة RPC. .P .nf \fBbool_t xdr_authunix_parms(XDR *\fP\fIxdrs\fP\fB, struct authunix_parms *\fP\fIaupp\fP\fB);\fP .fi .IP تُستخدم لوصف بيانات اعتماد UNIX. هذا الروتين مفيد للمستخدمين الذين يرغبون في توليد بيانات الاعتماد هذه دون استخدام حزمة استيثاق RPC. .P .nf \fBvoid xdr_callhdr(XDR *\fP\fIxdrs\fP\fB, struct rpc_msg *\fP\fIchdr\fP\fB);\fP .fi .IP تُستخدم لوصف رسائل رأس استدعاء RPC. هذا الروتين مفيد للمستخدمين الذين يرغبون في توليد رسائل بنمط RPC دون استخدام حزمة RPC. .P .nf \fBbool_t xdr_callmsg(XDR *\fP\fIxdrs\fP\fB, struct rpc_msg *\fP\fIcmsg\fP\fB);\fP .fi .IP تُستخدم لوصف رسائل استدعاء RPC. هذا الروتين مفيد للمستخدمين الذين يرغبون في توليد رسائل بنمط RPC دون استخدام حزمة RPC. .P .nf \fBbool_t xdr_opaque_auth(XDR *\fP\fIxdrs\fP\fB, struct opaque_auth *\fP\fIap\fP\fB);\fP .fi .IP تُستخدم لوصف رسائل معلومات الاستيثاق في RPC. هذه الدالة مفيدة للمستخدمين الذين يرغبون في توليد رسائل بأسلوب RPC دون استخدام حزمة RPC. .P .nf \fBbool_t xdr_pmap(XDR *\fP\fIxdrs\fP\fB, struct pmap *\fP\fIregs\fP\fB);\fP .fi .IP تُستخدم لوصف المعاملات لإجراءات \fBportmap\fP المختلفة، خارجيًا. هذه الدالة مفيدة للمستخدمين الذين يرغبون في توليد هذه المعاملات دون استخدام واجهة \fBpmap\fP. .P .nf \fBbool_t xdr_pmaplist(XDR *\fP\fIxdrs\fP\fB, struct pmaplist **\fP\fIrp\fP\fB);\fP .fi .IP تُستخدم لوصف قائمة من تعيينات المنافذ، خارجيًا. هذه الدالة مفيدة للمستخدمين الذين يرغبون في توليد هذه المعاملات دون استخدام واجهة \fBpmap\fP. .P .nf \fBbool_t xdr_rejected_reply(XDR *\fP\fIxdrs\fP\fB, struct rejected_reply *\fP\fIrr\fP\fB);\fP .fi .IP تُستخدم لوصف رسائل الرد في RPC. هذه الدالة مفيدة للمستخدمين الذين يرغبون في توليد رسائل بأسلوب RPC دون استخدام حزمة RPC. .P .nf \fBbool_t xdr_replymsg(XDR *\fP\fIxdrs\fP\fB, struct rpc_msg *\fP\fIrmsg\fP\fB);\fP .fi .IP تُستخدم لوصف رسائل الرد في RPC. هذه الدالة مفيدة للمستخدمين الذين يرغبون في توليد رسائل بأسلوب RPC دون استخدام حزمة RPC. .P .nf \fBvoid xprt_register(SVCXPRT *\fP\fIxprt\fP\fB);\fP .fi .IP بعد إنشاء مقابض نقل خدمة RPC، يجب عليها تسجيل نفسها لدي حزمة خدمة RPC. هذه الدالة تُعدل المتغير العام \fIsvc_fds\fP. منفذو الخدمة عادة لا يحتاجون هذه الدالة. .P .nf \fBvoid xprt_unregister(SVCXPRT *\fP\fIxprt\fP\fB);\fP .fi .IP قبل إتلاف مقبض نقل خدمة RPC، يجب عليه إلغاء تسجيل نفسه لدي حزمة خدمة RPC. هذه الدالة تُعدل المتغير العام \fIsvc_fds\fP. منفذو الخدمة عادة لا يحتاجون هذه الدالة. .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. الواجهة السمة القيمة T{ .na .nh \fBauth_destroy\fP()، \fBauthnone_create\fP()، \fBauthunix_create\fP()، \fBauthunix_create_default\fP()، \fBcallrpc\fP()، \fBclnt_broadcast\fP()، \fBclnt_call\fP()، \fBclnt_destroy\fP()، \fBclnt_create\fP()، \fBclnt_control\fP()، \fBclnt_freeres\fP()، \fBclnt_geterr\fP()، \fBclnt_pcreateerror\fP()، \fBclnt_perrno\fP()، \fBclnt_perror\fP()، \fBclnt_spcreateerror\fP()، \fBclnt_sperrno\fP()، \fBclnt_sperror\fP()، \fBclntraw_create\fP()، \fBclnttcp_create\fP()، \fBclntudp_create\fP()، \fBclntudp_bufcreate\fP()، \fBget_myaddress\fP()، \fBpmap_getmaps\fP()، \fBpmap_getport\fP()، \fBpmap_rmtcall\fP()، \fBpmap_set\fP()، \fBpmap_unset\fP()، \fBregisterrpc\fP()، \fBsvc_destroy\fP()، \fBsvc_freeargs\fP()، \fBsvc_getargs\fP()، \fBsvc_getcaller\fP()، \fBsvc_getreqset\fP()، \fBsvc_getreq\fP()، \fBsvc_register\fP()، \fBsvc_run\fP()، \fBsvc_sendreply\fP()، \fBsvc_unregister\fP()، \fBsvcerr_auth\fP()، \fBsvcerr_decode\fP()، \fBsvcerr_noproc\fP()، \fBsvcerr_noprog\fP()، \fBsvcerr_progvers\fP()، \fBsvcerr_systemerr\fP()، \fBsvcerr_weakauth\fP()، \fBsvcfd_create\fP()، \fBsvcraw_create\fP()، \fBsvctcp_create\fP()، \fBsvcudp_bufcreate\fP()، \fBsvcudp_create\fP()، \fBxdr_accepted_reply\fP()، \fBxdr_authunix_parms\fP()، \fBxdr_callhdr\fP()، \fBxdr_callmsg\fP()، \fBxdr_opaque_auth\fP()، \fBxdr_pmap\fP()، \fBxdr_pmaplist\fP()، \fBxdr_rejected_reply\fP()، \fBxdr_replymsg\fP()، \fBxprt_register\fP()، \fBxprt_unregister\fP() T} سلامة الخيوط MT\-Safe .TE .SH "انظر أيضًا" .\" We don't have an rpc_secure.3 page in the set at the moment -- MTK, 19 Sep 05 .\" .BR rpc_secure (3), \fBxdr\fP(3) .P كتيبات الأدلة التالية: .RS استدعاءات الإجراءات عن بُعد: مواصفات البروتوكول .br دليل برمجة استدعاءات الإجراءات عن بُعد .br دليل برمجة rpcgen .br .RE .P \fIRPC: مواصفات بروتوكول استدعاء الإجراءات عن بُعد\fP، RFC\ 1050، شركة Sun Microsystems، USC\-ISI. .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .