realpath(3)

الاسم
realpath - إرجاع مسار المُطلق المُقنن

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <limits.h>
#include <stdlib.h>

char *realpath(const char *restrict path,
               char *restrict resolved_path);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

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 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.