| realpath(3) | Library Functions Manual | realpath(3) |
الاسم¶
realpath - إرجاع مسار المُطلق المُقنن
المكتبة¶
مكتبة سي المعيارية (libc، -lc)
موجز¶
#include <limits.h> #include <stdlib.h>
char *realpath(const char *restrict path,
char *restrict resolved_path);
realpath():
_XOPEN_SOURCE >= 500
|| /* glibc >= 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _BSD_SOURCE
الوصف¶
توسع الدالة realpath() كل الروابط الرمزية وتحل المراجع إلى /./ و /../ والمحارف الإضافية '/' في سلسلة المحارف المنتهية بصفر المُسماة بواسطة path لإنتاج مسار مُطلق مُقنن. يُخزَّن المسار الناتج كسلسلة محارف منتهية بصفر، حتى حد أقصى PATH_MAX بايت، في المخزن المؤقت المشار إليه بواسطة resolved_path. لن يحتوي المسار الناتج على رابط رمزي أو مكونات /./ أو /../.
إذا حُدد resolved_path كـ NULL، فإن realpath() تستخدم malloc(3) لتخصيص مخزن مؤقت يصل إلى PATH_MAX بايت لحمل اسم المسار المُحل، وتُعيد مؤشرًا إلى هذا المخزن. يجب على المُستدعي تحرير هذا المخزن باستخدام free(3).
قيمة الإرجاع¶
إذا لم يكن هناك خطأ، تُعيد realpath() مؤشرًا إلى resolved_path.
وإلا، تُعيد NULL، وتكون محتويات المصفوفة resolved_path غير مُعرفة، ويُضبط errno للإشارة إلى الخطأ.
الأخطاء¶
- EACCES
- رُفض إذن القراءة أو البحث لمكون من بادئة المسار.
- EINVAL
- path هو NULL. (قبل glibc 2.3، يُعاد هذا الخطأ أيضًا إذا كان resolved_path هو NULL.)
- EIO
- حدث خطأ إدخال/إخراج أثناء القراءة من نظام الملفات.
- ELOOP
- صودفت روابط رمزية كثيرة جدًا عند ترجمة اسم المسار.
- ENAMETOOLONG
- تجاوز مكون من اسم المسار NAME_MAX محرفًا، أو تجاوز اسم المسار بالكامل PATH_MAX محرفًا.
- ENOENT
- الملف المسمى غير موجود.
- ENOMEM
- نفدت الذاكرة.
- ENOTDIR
- أحد مكونات بادئة المسار ليس دليلاً.
السمات¶
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
| الواجهة | السمة | القيمة |
| realpath() | سلامة الخيوط | MT-Safe |
الإصدارات¶
امتدادات جنو¶
إذا فشلت الاستدعاء مع EACCES أو ENOENT وكان resolved_path ليس NULL، فإن بادئة path غير القابلة للقراءة أو غير الموجودة تُعاد في resolved_path.
المعايير¶
POSIX.1-2008.
التاريخ¶
4.4BSD، POSIX.1-2001، Solaris.
ينص POSIX.1-2001 على أن السلوك إذا كان resolved_path هو NULL مُعرف بالتطبيق. يحدد POSIX.1-2008 السلوك الموصوف في هذه الصفحة.
في 4.4BSD و Solaris، الحد الأقصى لطول اسم المسار هو MAXPATHLEN (الموجود في <sys/param.h>). يفرض SUSv2 PATH_MAX و NAME_MAX، كما هو موجود في <limits.h> أو المقدم بواسطة الدالة pathconf(3). سيكون مقطع مصدر نموذجي
#ifdef PATH_MAX
path_max = PATH_MAX; #else
path_max = pathconf(path, _PC_PATH_MAX);
if (path_max <= 0)
path_max = 4096; #endif
(لكن انظر قسم الأخطاء.)
العلل¶
النسخة القياسية POSIX.1-2001 من هذه الدالة معطوبة بالتصميم، لأنه من المستحيل تحديد حجم مناسب للمخزن المؤقت للإخراج resolved_path. وفقًا لـ POSIX.1-2001، يكفي مخزن مؤقت بحجم PATH_MAX، لكن PATH_MAX لا يلزم أن يكون ثابتًا مُعرفًا، وقد يلزم الحصول عليه باستخدام pathconf(3). وطلب pathconf(3) لا يساعد حقًا، لأنه من ناحية يحذر POSIX من أن نتيجة pathconf(3) قد تكون ضخمة وغير مناسبة لتخصيص الذاكرة بواسطة malloc، ومن ناحية أخرى قد تُعيد pathconf(3) -1 للإشارة إلى أن PATH_MAX غير محدود. تتيح ميزة resolved_path == NULL، غير المُوحدة في POSIX.1-2001 ولكن المُوحدة في POSIX.1-2008، تجنب مشكلة التصميم هذه.
انظر أيضًا¶
realpath(1)، readlink(2)، canonicalize_file_name(3)، getcwd(3)، pathconf(3)، sysconf(3)
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 8 فبراير 2026 | صفحات دليل لينكس 6.18 |