basename(3)

الاسم
basename, dirname - تحليل مكونات مسار الملف

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

موجز
#include <libgen.h>

char *dirname(char *path);
char *basename(char *path);

الوصف
تحذير: هناك دالتان مختلفتان basename()؛ انظر أدناه.

الدالتان dirname() و basename() تقسمان سلسلة مسار منتهية بصفر إلى مكونات الدليل واسم الملف. في الحالة المعتادة، تُرجع dirname() السلسلة حتى آخر '/' دون تضمينه، وتُرجع basename() المكون الذي يلي آخر '/'. لا تُحسب أحرف '/' الزائدة كجزء من المسار.

إذا لم يحتوي path على شرطة مائلة، تُرجع dirname() السلسلة "." بينما تُرجع basename() نسخة من path. إذا كان path هو السلسلة "/"، فترجع كل من dirname() و basename() السلسلة "/". إذا كان path مؤشرًا فارغًا أو يشير إلى سلسلة فارغة، فترجع كل من dirname() و basename() السلسلة ".".

يؤدي دمج السلسلة المُرجعة من dirname()، و"/"، والسلسلة المُرجعة من basename() إلى الحصول على مسار كامل.

قد تُعدل كل من dirname() و basename() محتويات path، لذا قد يكون من المستحسن تمرير نسخة عند استدعاء إحدى هاتين الدالتين.

قد تُرجع هذه الدوال مؤشرات إلى ذاكرة مخصصة بشكل ثابت قد تُستبدل باستدعاءات لاحقة. بدلاً من ذلك، قد تُرجع مؤشرًا إلى جزء من path، لذا يجب عدم تعديل أو تحرير السلسلة المشار إليها بواسطة path حتى لا تكون هناك حاجة للمؤشر المُعاد من الدالة.

القائمة التالية من الأمثلة (مأخوذة من SUSv2) تُظهر السلاسل المُرجعة من dirname() و basename() لمسارات مختلفة:
    المسار | dirname | basename
    /usr/lib | /usr | lib
    /usr/ | / | usr
    usr | . | usr
    / | / | /
    . | . | .
    .. | . | ..

قيمة الإرجاع
كل من dirname() و basename() تُرجعان مؤشرات إلى سلاسل منتهية بصفر. (لا تمرر هذه المؤشرات إلى free(3).)

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
basename(), dirname() | سلامة الخيوط | MT-Safe

الإصدارات
يوجد إصداران مختلفان من basename() - إصدار POSIX الموصوف أعلاه، وإصدار GNU الذي يُحصل عليه بعد

        #define _GNU_SOURCE         /* See feature_test_macros(7) */
    #include <string.h>

إصدار GNU لا يعدّل وسيطه أبدًا، ويعيد السلسلة الفارغة عندما يحتوي path على شرطة مائلة لاحقة، وبشكل خاص أيضًا عندما يكون "/". لا يوجد إصدار GNU لـ dirname().

مع glibc، يُحصل على إصدار POSIX من basename() عند تضمين <libgen.h>، وإلا يُحصل على إصدار GNU.

المعايير
POSIX.1-2008.

التاريخ
POSIX.1-2001.

العلل
في تطبيق glibc، إصدارات POSIX لهذه الدوال تُعدّل وسيط path، وتُحدث خطأ تجزئة عند استدعائها بسلسلة ثابتة مثل "/usr/".

قبل glibc 2.2.1، إصدار glibc من dirname() لم يعالج أسماء المسارات ذات الأحرف '/' اللاحقة بشكل صحيح، وأحدث خطأ تجزئة إذا أُعطي وسيط NULL.

أمثلة
مقتطف الشيفرة التالي يوضح استخدام basename() و dirname():
    char *dirc, *basec, *bname, *dname;
    char *path = "/etc/passwd";

    dirc = strdup(path);
    basec = strdup(path);
    dname = dirname(dirc);
    bname = basename(basec);
    printf("dirname=%s, basename=%s\n", dname, bname);

انظر أيضًا
basename(1)، dirname(1)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

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