.\" -*- coding: UTF-8 -*- .\" Copyright 1983-1991, The Regents of the University of California. .\" Copyright 2011, Guillem Jover .\" Copyright 2006-2014, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: BSD-4-Clause-UC .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH readlink 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم readlink, readlinkat \- قراءة قيمة رابط رمزي .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBssize_t readlink(\fPsize_t bufsiz; \fB const char *restrict \fP\fIpath\fP\fB,\fP \fB char \fP\fIbuf\fP\fB[restrict \fP\fIbufsiz\fP\fB], size_t \fP\fIbufsiz\fP\fB);\fP .P \fB#include \fP/* تعريف ثوابت \fBAT_*\fP */ \fB#include \fP .P \fBssize_t readlinkat(\fPsize_t bufsiz; \fB int \fP\fIdirfd\fP\fB, const char *restrict \fP\fIpath\fP\fB,\fP \fB char \fP\fIbuf\fP\fB[restrict \fP\fIbufsiz\fP\fB], size_t \fP\fIbufsiz\fP\fB);\fP .P .fi .RS -4 متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .RE .P \fBreadlink\fP(): .nf .\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L || /* glibc <= 2.19: */ _BSD_SOURCE .fi .P \fBreadlinkat\fP(): .nf منذ glibc 2.10: _POSIX_C_SOURCE >= 200809L قبل glibc 2.10: _ATFILE_SOURCE .fi .SH الوصف تضع \fBreadlink\fP() محتويات الرابط الرمزي \fIpath\fP في المخزن المؤقت \fIbuf\fP، الذي حجمه \fIbufsiz\fP. لا تُلحق \fBreadlink\fP() بايت فارغ ختامي بـ \fIbuf\fP. ستقطع (بصمت) المحتويات (إلى طول \fIbufsiz\fP حرفًا)، إذا كان المخزن المؤقت صغيرًا جدًا لاستيعاب كل المحتويات. .SS readlinkat() تعمل استدعاء النظام \fBreadlinkat\fP() بنفس طريقة \fBreadlink\fP() تمامًا، باستثناء الاختلافات الموصوفة هنا. .P إذا كان \fIpath\fP نسبيًا، فيُفسر بالنسبة للدليل المشار إليه بواصف الملف \fIdirfd\fP (بدلاً من دليل العمل الحالي للعملية المستدعية، كما تفعل \fBreadlink\fP() لاسم مسار نسبي). .P إذا كان \fIpath\fP نسبيًا و \fIdirfd\fP هو القيمة الخاصة \fBAT_FDCWD\fP، فيُفسر \fIpath\fP بالنسبة لدليل العمل الحالي للعملية المستدعية (مثل \fBreadlink\fP()). .P إذا كان المسار \fIpath\fP مطلقاً، فُيتجاهل \fIdirfd\fP. .P .\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d منذ Linux 2.6.39، يمكن أن يكون \fIpath\fP سلسلة فارغة، وفي هذه الحالة يعمل الاستدعاء على الرابط الرمزي المشار إليه بـ \fIdirfd\fP (والذي يجب الحصول عليه باستخدام \fBopen\fP(2) مع العلمين \fBO_PATH\fP و \fBO_NOFOLLOW\fP). .P انظر \fBopenat\fP(2) لشرح الحاجة إلى \fBreadlinkat\fP(). .SH "قيمة الإرجاع" عند النجاح، تُرجع هذه الاستدعاءات عدد البايتات الموضوعة في \fIbuf\fP. (إذا كانت القيمة المُرجعة تساوي \fIbufsiz\fP، فقد حدث اقتطاع.) عند الخطأ، يُرجع \-1 ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEACCES\fP تم رفض إذن البحث لمكون من بادئة المسار. (انظر أيضًا \fBpath_resolution\fP(7).) .TP \fBEBADF\fP (\fBreadlinkat\fP()) \fIpath\fP نسبي لكن \fIdirfd\fP ليس \fBAT_FDCWD\fP ولا واصف ملف صالح. .TP \fBEFAULT\fP يمتد \fIbuf\fP خارج مساحة العنوان المخصصة للعملية. .TP \fBEINVAL\fP .\" At the glibc level, bufsiz is unsigned, so this error can only occur .\" if bufsiz==0. However, the in the kernel syscall, bufsiz is signed, .\" and this error can also occur if bufsiz < 0. .\" See: http://thread.gmane.org/gmane.linux.man/380 .\" Subject: [patch 0/3] [RFC] kernel/glibc mismatch of "readlink" syscall? \fIbufsiz\fP ليس موجبًا. .TP \fBEINVAL\fP الملف المُسمى (أي مكون اسم الملف النهائي لـ \fIpath\fP) ليس رابطًا رمزيًا. .TP \fBEIO\fP حدث خطأ إدخال/إخراج أثناء القراءة من نظام الملفات. .TP \fBELOOP\fP صودفت روابط رمزية كثيرة جدًا عند ترجمة اسم المسار. .TP \fBENAMETOOLONG\fP اسم مسار، أو مكون من اسم مسار، طويل جدًا. .TP \fBENOENT\fP الملف المسمى غير موجود. .TP \fBENOMEM\fP ذاكرة النواة المتوفرة غير كافية. .TP \fBENOTDIR\fP أحد مكونات بادئة المسار ليس دليلاً. .TP \fBENOTDIR\fP (\fBreadlinkat\fP()) \fIpath\fP نسبي و \fIdirfd\fP هو واصف ملف يشير إلى ملف غير دليل. .SH المعايير POSIX.1\-2024. .SH التاريخ .TP \fBreadlink\fP() 4.4BSD (ظهر لأول مرة في 4.2BSD)، POSIX.1\-2001، POSIX.1\-2008. .TP \fBreadlinkat\fP() POSIX.1\-2008. لينكس 2.6.16،‏ glibc 2.4. .P حتى glibc 2.4 وما تضمنته، كان نوع الإرجاع لـ \fBreadlink\fP() مُصرحًا به كـ \fIint\fP. حاليًا، يُصرح بنوع الإرجاع كـ \fIssize_t\fP، كما هو مطلوب (حديثًا) في POSIX.1\-2001. .SS glibc على النوى الأقدم حيث \fBreadlinkat\fP() غير متوفرة، ترجع دالة الغلاف glibc إلى استخدام \fBreadlink\fP(). عندما يكون \fIpath\fP نسبيًا، تبني glibc اسم مسار بناءً على الرابط الرمزي في \fI/proc/self/fd\fP الذي يتوافق مع وسيطة \fIdirfd\fP. .SH ملاحظات قد لا يوفر استخدام مخزن مؤقت بحجم ثابت مساحة كافية لمحتويات الرابط الرمزي. يمكن الحصول على الحجم المطلوب للمخزن المؤقت من قيمة \fIstat.st_size\fP المُرجعة باستدعاء \fBlstat\fP(2) على الرابط. ومع ذلك، يجب التحقق من عدد البايتات التي كتبتها \fBreadlink\fP() و \fBreadlinkat\fP() للتأكد من أن حجم الرابط الرمزي لم يزد بين الاستدعاءات. يعالج التخصيص الديناميكي للمخزن المؤقت لـ \fBreadlink\fP() و \fBreadlinkat\fP() أيضًا مشكلة قابلية النقل الشائعة عند استخدام \fBPATH_MAX\fP لحجم المخزن المؤقت، حيث أن هذا الثابت غير مضمون التعريف وفقًا لـ POSIX إذا لم يكن لدى النظام مثل هذا الحد. .SH أمثلة يخصص البرنامج التالي المخزن المؤقت المطلوب بواسطة \fBreadlink\fP() ديناميكيًا من المعلومات المقدمة بواسطة \fBlstat\fP(2)، مع الرجوع إلى مخزن مؤقت بحجم \fBPATH_MAX\fP في الحالات التي يُبلغ فيها \fBlstat\fP(2) عن حجم صفري. .P .\" SRC BEGIN (readlink.c) .EX #include #include #include #include #include #include \& int main(int argc, char *argv[]) { char *buf; ssize_t nbytes, bufsiz; struct stat sb; \& if (argc != 2) { fprintf(stderr, "Usage: %s \[rs]n", argv[0]); exit(EXIT_FAILURE); } \& if (lstat(argv[1], &sb) == \-1) { perror("lstat"); exit(EXIT_FAILURE); } \& /* Add one to the link size, so that we can determine whether the buffer returned by readlink() was truncated. */ \& bufsiz = sb.st_size + 1; \& /* Some magic symlinks under (for example) /proc and /sys report \[aq]st_size\[aq] as zero. In that case, take PATH_MAX as a "good enough" estimate. */ \& if (sb.st_size == 0) bufsiz = PATH_MAX; \& buf = malloc(bufsiz); if (buf == NULL) { perror("malloc"); exit(EXIT_FAILURE); } \& nbytes = readlink(argv[1], buf, bufsiz); if (nbytes == \-1) { perror("readlink"); exit(EXIT_FAILURE); } \& /* Print only \[aq]nbytes\[aq] of \[aq]buf\[aq], as it doesn't contain a terminating null byte (\[aq]\[rs]0\[aq]). */ printf("\[aq]%s\[aq] points to \[aq]%.*s\[aq]\[rs]n", argv[1], (int) nbytes, buf); \& /* If the return value was equal to the buffer size, then the link target was larger than expected (perhaps because the target was changed between the call to lstat() and the call to readlink()). Warn the user that the returned target may have been truncated. */ \& if (nbytes == bufsiz) printf("(Returned buffer may have been truncated)\[rs]n"); \& free(buf); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \fBreadlink\fP(1), \fBlstat\fP(2), \fBstat\fP(2), \fBsymlink\fP(2), \fBrealpath\fP(3), \fBpath_resolution\fP(7), \fBsymlink\fP(7) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .