.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 2015, Michael Kerrisk .\" 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 dlinfo 3 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم dlinfo \- الحصول على معلومات حول كائن محمل ديناميكياً .SH المكتبة مكتبة الربط الديناميكي (\fIlibdl\fP،\ \fI\-ldl\fP) .SH موجز .nf \fB#define _GNU_SOURCE\fP \fB#include \fP \fB#include \fP .P \fBint dlinfo(void *restrict \fPhandle\fB, int \fPrequest\fB, void *restrict \fPinfo\fB);\fP .fi .SH الوصف الدالة \fBdlinfo\fP() تحصل على معلومات حول الكائن المحمّل ديناميكيًا المشار إليه بواسطة \fIhandle\fP (يُحصل عليه عادةً باستدعاء سابق لـ \fBdlopen\fP(3) أو \fBdlmopen\fP(3)). المُعامل \fIrequest\fP يُحدد أي معلومات تُرجع. المُعامل \fIinfo\fP هو مؤشر لمخزن يُستخدم لتخزين المعلومات المُرجعة من الاستدعاء؛ نوع هذا المُعامل يعتمد على \fIrequest\fP. .P القيم التالية مدعومة لـ \fIrequest\fP (مع النوع المُقابل لـ \fIinfo\fP المُظهر بين قوسين): .TP \fBRTLD_DI_LMID\fP (\f[I]Lmid_t *\fR) الحصول على مُعرّف قائمة خريطة الربط (الفضاء الاسمي) الذي حُمّل فيه \fIhandle\fP. .TP \fBRTLD_DI_LINKMAP\fP (\f[I]struct link_map **\fR) الحصول على مؤشر للهيكل \fIlink_map\fP المُقابل لـ \fIhandle\fP. المُعامل \fIinfo\fP يشير إلى مؤشر لهيكل \fIlink_map\fP، المُعرّف في \fI\fP كالتالي: .IP .in +4n .EX struct link_map { ElfW(Addr) l_addr; /* الفرق بين العنوان في ملف ELF والعنوان في الذاكرة */ char *l_name; /* مسار المسار المطلق حيث وُجد الكائن */ ElfW(Dyn) *l_ld; /* القسم الديناميكي للكائن المشترك */ struct link_map *l_next, *l_prev; /* سلسلة الكائنات المحملة */ \& /* بالإضافة إلى حقول إضافية خاصة بـ التنفيذ */ }; .EE .in .TP \fBRTLD_DI_ORIGIN\fP (\f[I]char *\fR) نسخ مسار أصل الكائن المُشارك المُقابل لـ \fIhandle\fP إلى الموقع المُشار إليه بواسطة \fIinfo\fP. .TP \fBRTLD_DI_SERINFO\fP (\f[I]Dl_serinfo *\fR) الحصول على مسارات بحث المكتبة للكائن المُشارك المُشار إليه بواسطة \fIhandle\fP. المُعامل \fIinfo\fP هو مؤشر لـ \fIDl_serinfo\fP يحتوي على مسارات البحث. نظرًا لأن عدد مسارات البحث قد يختلف، فإن حجم الهيكل المُشار إليه بواسطة \fIinfo\fP يمكن أن يختلف. طلب \fBRTLD_DI_SERINFOSIZE\fP الموصوف أدناه يسمح للتطبيقات بحجم المخزن بشكل مناسب. يجب على المُستدعي تنفيذ الخطوات التالية: .RS .IP (1) 5 استخدام طلب \fBRTLD_DI_SERINFOSIZE\fP لملء هيكل \fIDl_serinfo\fP بالحجم (\fIdls_size\fP) للهيكل المطلوب لطلب \fBRTLD_DI_SERINFO\fP اللاحق. .IP (2) تخصيص مخزن \fIDl_serinfo\fP بالحجم الصحيح (\fIdls_size\fP). .IP (3) استخدام طلب \fBRTLD_DI_SERINFOSIZE\fP إضافي لملء حقلي \fIdls_size\fP و \fIdls_cnt\fP للمخزن المُخصص في الخطوة السابقة. .IP (4) استخدام \fBRTLD_DI_SERINFO\fP للحصول على مسارات بحث المكتبة. .RE .IP الهيكل \fIDl_serinfo\fP مُعرّف كالتالي: .IP .in +4n .EX typedef struct { size_t dls_size; /* الحجم بالبايت للمخزن المؤقت (buffer) بأكمله */ unsigned int dls_cnt; /* عدد العناصر في \[aq]dls_serpath\[aq] */ Dl_serpath dls_serpath[1]; /* أطول في الواقع، بعدد \[aq]dls_cnt\[aq] من العناصر */ } Dl_serinfo; .EE .in .IP كل عنصر من عناصر \fIdls_serpath\fP في البنية أعلاه هو بنية بالشكل التالي: .IP .in +4n .EX typedef struct { char *dls_name; /* اسم دليل مسار البحث عن المكتبات */ unsigned int dls_flags; /* يشير إلى مصدر هذا الدليل */ } Dl_serpath; .EE .in .IP حقل \fIdls_flags\fP غير مستخدم حالياً، ويحتوي دائماً على صفر. .TP \fBRTLD_DI_SERINFOSIZE\fP (\f[I]Dl_serinfo *\fR) يُملأ حقلي \fIdls_size\fP و \fIdls_cnt\fP من بنية \fIDl_serinfo\fP المشار إليها بواسطة \fIinfo\fP بقيم مناسبة لتخصيص مخبأ لاستخدامه في طلب \fBRTLD_DI_SERINFO\fP لاحق. .TP \fBRTLD_DI_TLS_MODID\fP (\f[I]size_t *\fR, منذ glibc 2.4) يحصل على معرف الوحدة لمقطع TLS (التخزين المحلي للخيط) لهذا الكائن المشترك، كما يُستخدم في إعادة توطين TLS. إذا لم يُعرّف هذا الكائن مقطع TLS، يُوضع صفر في \fI*info\fP. .TP \fBRTLD_DI_TLS_DATA\fP (\f[I]void **\fR, منذ glibc 2.4) يحصل على مؤشر إلى كتلة TLS للخيط المستدعي المطابقة لمقطع TLS لهذا الكائن المشترك. إذا لم يُعرّف هذا الكائن مقطع PT_TLS، أو إذا لم يخصص الخيط المستدعي كتلة له، يُوضع NULL في \fI*info\fP. .TP \fBRTLD_DI_PHDR\fP (\f[I]const ElfW(Phdr *)\fR, منذ glibc 2.34.1) .\" glibc commit d056c212130280c0a54d9a4f72170ec621b70ce5 (2.36) .\" glibc commit 28ea43f8d64f0dd1f2de75525157730e1532e600 (2.35.1) .\" glibc commit 91c2e6c3db44297bf4cb3a2e3c40236c5b6a0b23 (2.34.1) يحصل على عنوان رأس البرنامج لهذا الكائن المشترك ويضعه في \fI*info\fP. يُرجع استدعاء \fBdlinfo\fP هذا عدد رؤوس البرنامج في الكائن المشترك. .SH "قيمة الإرجاع" عند النجاح، يُرجع \fBdlinfo\fP() 0 (إذا لم يُحدد صراحة)، أو قيمة موجبة مطابقة للطلب. عند الخطأ، يُرجع \-1؛ يمكن تشخيص الخطأ باستخدام \fBdlerror\fP(3). .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. الواجهة السمة القيمة T{ .na .nh \fBdlinfo\fP() T} سلامة الخيوط MT\-Safe .TE .SH الإصدارات مجموعات الطلبات المدعومة من التطبيقات المختلفة تتداخل جزئياً فقط. .SH المعايير GNU. .SH التاريخ glibc 2.3.3. Solaris. .SH أمثلة البرنامج أدناه يفتح كائناً مشتركاً باستخدام \fBdlopen\fP(3) ثم يستخدم طلبي \fBRTLD_DI_SERINFOSIZE\fP و \fBRTLD_DI_SERINFO\fP للحصول على قائمة مسار بحث المكتبة للمكتبة. إليك مثال لما قد نراه عند تشغيل البرنامج: .P .in +4n .EX $\fB ./a.out /lib64/libm.so.6\fP; dls_serpath[0].dls_name = /lib64 dls_serpath[1].dls_name = /usr/lib64 .EE .in .SS "مصدر البرنامج" .\" SRC BEGIN (dlinfo.c) \& .EX #define _GNU_SOURCE #include #include #include #include \& int main(int argc, char *argv[]) { void *handle; Dl_serinfo serinfo; Dl_serinfo *sip; \& if (argc != 2) { fprintf(stderr, "Usage: %s \[rs]n", argv[0]); exit(EXIT_FAILURE); } \& /* Obtain a handle for shared object specified on command line. */ \& handle = dlopen(argv[1], RTLD_NOW); if (handle == NULL) { fprintf(stderr, "dlopen() failed: %s\[rs]n", dlerror()); exit(EXIT_FAILURE); } \& /* Discover the size of the buffer that we must pass to RTLD_DI_SERINFO. */ \& if (dlinfo(handle, RTLD_DI_SERINFOSIZE, &serinfo) == \-1) { fprintf(stderr, "RTLD_DI_SERINFOSIZE failed: %s\[rs]n", dlerror()); exit(EXIT_FAILURE); } \& /* Allocate the buffer for use with RTLD_DI_SERINFO. */ \& sip = malloc(serinfo.dls_size); if (sip == NULL) { perror("malloc"); exit(EXIT_FAILURE); } \& /* Initialize the \[aq]dls_size\[aq] and \[aq]dls_cnt\[aq] fields in the newly allocated buffer. */ \& if (dlinfo(handle, RTLD_DI_SERINFOSIZE, sip) == \-1) { fprintf(stderr, "RTLD_DI_SERINFOSIZE failed: %s\[rs]n", dlerror()); exit(EXIT_FAILURE); } \& /* Fetch and print library search list. */ \& if (dlinfo(handle, RTLD_DI_SERINFO, sip) == \-1) { fprintf(stderr, "RTLD_DI_SERINFO failed: %s\[rs]n", dlerror()); exit(EXIT_FAILURE); } \& for (size_t j = 0; j < serinfo.dls_cnt; j++) printf("dls_serpath[%zu].dls_name = %s\[rs]n", j, sip\->dls_serpath[j].dls_name); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \fBdl_iterate_phdr\fP(3), \fBdladdr\fP(3), \fBdlerror\fP(3), \fBdlopen\fP(3), \fBdlsym\fP(3), \fBld.so\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 .