.\" -*- coding: UTF-8 -*- '\" t .\" 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 getservent_r 3 "22 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم getservent_r, getservbyname_r, getservbyport_r \- الحصول على مدخل الخدمة (قابل لإعادة الدخول) .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint getservent_r(\fPsize_t size; \fB struct servent *restrict \fP\fIresult_buf\fP\fB,\fP \fB char \fP\fIbuf\fP\fB[restrict \fP\fIsize\fP\fB], size_t \fP\fIsize\fP\fB,\fP \fB struct servent **restrict \fP\fIresult\fP\fB);\fP \fBint getservbyname_r(\fPsize_t size; \fB const char *restrict \fP\fIname\fP\fB,\fP \fB const char *restrict \fP\fIproto\fP\fB,\fP \fB struct servent *restrict \fP\fIresult_buf\fP\fB,\fP \fB char \fP\fIbuf\fP\fB[restrict \fP\fIsize\fP\fB], size_t \fP\fIsize\fP\fB,\fP \fB struct servent **restrict \fP\fIresult\fP\fB);\fP \fBint getservbyport_r(\fPsize_t size; \fB int \fP\fIport\fP\fB,\fP \fB const char *restrict \fP\fIproto\fP\fB,\fP \fB struct servent *restrict \fP\fIresult_buf\fP\fB,\fP \fB char \fP\fIbuf\fP\fB[restrict \fP\fIsize\fP\fB], size_t \fP\fIsize\fP\fB,\fP \fB struct servent **restrict \fP\fIresult\fP\fB);\fP .P .fi .RS -4 متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .RE .P \fBgetservent_r\fP(), \fBgetservbyname_r\fP(), \fBgetservbyport_r\fP(): .nf منذ glibc 2.19: _DEFAULT_SOURCE glibc 2.19 وما قبله: _BSD_SOURCE || _SVID_SOURCE .fi .SH الوصف الدوال \fBgetservent_r\fP() و \fBgetservbyname_r\fP() و \fBgetservbyport_r\fP() هي المعادلات القابلة لإعادة الدخول لـ \fBgetservent\fP(3) و \fBgetservbyname\fP(3) و \fBgetservbyport\fP(3) على التوالي. تختلف في طريقة إعادة بنية \fIservent\fP، وفي توقيع استدعاء الدالة وقيمة الإرجاع. تصف صفحة الدليل هذه الاختلافات فقط عن الدوال غير القابلة لإعادة الدخول. .P بدلاً من إرجاع مؤشر إلى بنية \fIservent\fP مخصصة بشكل ثابت كنتيجة للدالة، تنسخ هذه الدوال البنية إلى الموقع المشار إليه بواسطة \fIresult_buf\fP. .P .\" I can find no information on the required/recommended buffer size; .\" the nonreentrant functions use a 1024 byte buffer -- mtk. تُستخدم مصفوفة \fIbuf\fP لتخزين حقول السلاسل المحارف المشار إليها بواسطة بنية \fIservent\fP المعادة. (تخصص الدوال غير القابلة لإعادة الدخول هذه السلاسل في تخزين ثابت.) يُحدد حجم هذه المصفوفة في \fIsize\fP. إذا كانت \fIbuf\fP صغيرة جدًا، يفشل الاستدعاء مع الخطأ \fBERANGE\fP، ويجب على المستدعي المحاولة مرة أخرى بمخزن مؤقت أكبر. (يجب أن يكون مخزن مؤقت بحجم 1024 بايت كافيًا لمعظم التطبيقات.) .P إذا حصل استدعاء الدالة بنجاح على سجل خدمة، فسيُضبط \fI*result\fP للإشارة إلى \fIresult_buf\fP؛ وإلا، فسيُضبط \fI*result\fP إلى NULL. .SH "قيمة الإرجاع" عند النجاح، تُرجع هذه الدوال 0. عند الخطأ، تُرجع أحد أرقام الأخطاء الموجبة المدرجة في الأخطاء. .P عند الخطأ، السجل غير موجود (\fBgetservbyname_r\fP()، \fBgetservbyport_r\fP())، أو نهاية الإدخال (\fBgetservent_r\fP()) يُضبط \fIresult\fP إلى NULL. .SH الأخطاء .TP \fBENOENT\fP (\fBgetservent_r\fP()) لا مزيد من السجلات في قاعدة البيانات. .TP \fBERANGE\fP المخزن المؤقت \fIbuf\fP صغير جدًا. حاول مرة أخرى بمخزن أكبر (وزيادة \fIsize\fP). .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. الواجهة السمة القيمة T{ .na .nh \fBgetservent_r\fP(), \fBgetservbyname_r\fP(), \fBgetservbyport_r\fP() T} سلامة الخيوط المنطقة (locale) آمنة لتعدد المسالك (MT\-Safe) .TE .SH الإصدارات توجد دوال بأسماء مماثلة في بعض الأنظمة الأخرى، وإن كان ذلك عادةً بتواقيع استدعاء مختلفة. .SH المعايير GNU. .SH أمثلة يستخدم البرنامج أدناه \fBgetservbyport_r\fP() لاسترداد سجل الخدمة للمنفذ والبروتوكول المذكورين في وسيطة سطر الأوامر الأولى. إذا تم توفير وسيطة سطر أوامر ثالثة (عدد صحيح)، فتُستخدم كقيمة مبدئية لـ \fIsize\fP؛ إذا فشل \fBgetservbyport_r\fP() مع الخطأ \fBERANGE\fP، يعيد البرنامج المحاولة بأحجام مخزن مؤقت أكبر. تُظهر جلسة الصدفة التالية بعض الأمثلة على التشغيل: .P .in +4n .EX $\fB ./a.out 7 tcp 1\fP ERANGE! Retrying with larger buffer getservbyport_r() returned: 0 (success) (size=87) s_name=echo; s_proto=tcp; s_port=7; aliases= $\fB ./a.out 77777 tcp\fP getservbyport_r() returned: 0 (success) (size=1024) Call failed/record not found .EE .in .SS "مصدر البرنامج" .\" SRC BEGIN (getservent_r.c) \& .EX #define _GNU_SOURCE #include #include #include #include #include #include \& #define MAX_BUF 10000 \& #define streq(...) (strcmp(__VA_ARGS__) == 0) \& int main(int argc, char *argv[]) { int size, erange_cnt, port, s; struct servent result_buf; struct servent *result; char buf[MAX_BUF]; char *protop; \& if (argc < 3) { printf("Usage: %s port\-num proto\-name [size]\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& port = htons(atoi(argv[1])); protop = (streq(argv[2], "null") || streq(argv[2], "NULL")) ? NULL : argv[2]; \& size = 1024; if (argc > 3) size = atoi(argv[3]); \& if (size > MAX_BUF) { printf("Exceeded buffer limit (%d)\[rs]n", MAX_BUF); exit(EXIT_FAILURE); } \& erange_cnt = 0; do { s = getservbyport_r(port, protop, &result_buf, buf, size, &result); if (s == ERANGE) { if (erange_cnt == 0) printf("ERANGE! Retrying with larger buffer\[rs]n"); erange_cnt++; \& /* Increment a byte at a time so we can see exactly what size buffer was required. */ \& size++; \& if (size > MAX_BUF) { printf("Exceeded buffer limit (%d)\[rs]n", MAX_BUF); exit(EXIT_FAILURE); } } } while (s == ERANGE); \& printf("getservbyport_r() returned: %s (size=%d)\[rs]n", (s == 0) ? "0 (success)" : (s == ENOENT) ? "ENOENT" : strerror(s), size); \& if (s != 0 || result == NULL) { printf("Call failed/record not found\[rs]n"); exit(EXIT_FAILURE); } \& printf("s_name=%s; s_proto=%s; s_port=%d; aliases=", result_buf.s_name, result_buf.s_proto, ntohs(result_buf.s_port)); for (char **p = result_buf.s_aliases; *p != NULL; p++) printf("%s ", *p); printf("\[rs]n"); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \fBgetservent\fP(3), \fBservices\fP(5) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .