mkdir(2)

الاسم
mkdir, mkdirat - إنشاء دليل

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

موجز
#include <sys/stat.h>

int mkdir(const char *path, mode_t mode);

#include <fcntl.h>           /* تعريف ثوابت AT_* */
#include <sys/stat.h>

int mkdirat(int dirfd, const char *path, mode_t mode);

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

mkdirat():
    منذ glibc 2.10:
        _POSIX_C_SOURCE >= 200809L
    قبل glibc 2.10:
        _ATFILE_SOURCE

الوصف
mkdir() يحاول إنشاء دليل باسم path.

الوسيط mode يحدد وضع الدليل الجديد (انظر inode(7)). يُعدل بواسطة umask للعملية بالطريقة المعتادة: في غياب ACL مبدئي، يكون وضع الدليل المنشأ هو (mode & ~umask & 0777). ما إذا كانت بتات mode الأخرى تُكرّم للدليل المنشأ يعتمد على نظام التشغيل. بالنسبة للينكس، انظر الإصدارات أدناه.

الدليل المنشأ حديثًا سيكون مملوكًا لمعرف المستخدم الفعّال للعملية. إذا كان الدليل المحتوي على الملف يحتوي على بت set-group-ID مضبوطًا، أو إذا كان نظام الملفات موصولًا بدلالات مجموعة BSD (mount -o bsdgroups أو، بالمرادف mount -o grpid)، سيرث الدليل الجديد ملكية المجموعة من والده؛ وإلا سيكون مملوكًا لمعرف المجموعة الفعّال للعملية.

إذا كان الدليل الأب يحتوي على بت set-group-ID مضبوطًا، فسيكون كذلك للدليل المنشأ حديثًا.

  mkdirat()
نداء النظام mkdirat() يعمل بنفس الطريقة تمامًا مثل mkdir()، باستثناء الاختلافات الموصوفة هنا.

إذا كان path نسبيًا، فسيُفسر بالنسبة إلى الدليل المشار إليه بواسطة واصف الملف dirfd (بدلاً من كونه نسبيًا إلى دليل العمل الحالي للعملية المستدعية، كما يفعل mkdir() لاسم مسار نسبي).

إذا كان path نسبيًا وكان dirfd هو القيمة الخاصة AT_FDCWD، فسيُفسر path بالنسبة إلى دليل العمل الحالي للعملية المستدعية (مثل mkdir()).

إذا كان المسار path مطلقاً، فُيتجاهل dirfd.

انظر openat(2) لشرح الحاجة إلى mkdirat().

قيمة الإرجاع
mkdir() و mkdirat() يُرجعان صفرًا عند النجاح. عند الخطأ، يُرجع -1 ويُضبط errno للإشارة إلى الخطأ.

الأخطاء

EACCES
    الدليل الأب لا يسمح بإذن الكتابة للعملية، أو أحد الدلائل في path لم يسمح بإذن البحث. (انظر أيضًا path_resolution(7).)

EBADF
    (mkdirat()) path نسبي لكن dirfd ليس AT_FDCWD ولا واصف ملف صالح.

EDQUOT
    استُنفدت حصة المستخدم من كتل القرص أو الفهارس (inodes) على نظام الملفات.

EEXIST
    path موجود بالفعل (ليس بالضرورة كدليل). يشمل هذا الحالة حيث path هو رابط رمزي، سواء كان معلقًا أم لا.

EFAULT
    المسار path يشير إلى خارج مساحة العناوين التي يمكن الوصول إليها.

EINVAL
    المكون النهائي ("basename") لـ path للدليل الجديد غير صالح (مثلًا، يحتوي على أحرف غير مسموح بها بواسطة نظام الملفات الأساسي).

ELOOP
    وُجد عدد كبير جدًا من الوصلات الرمزية أثناء تحليل path.

EMLINK
    عدد الروابط إلى الدليل الأب سيتجاوز LINK_MAX.

ENAMETOOLONG
    المسار path كان طويلاً جداً.

ENOENT
    مكون الدليل في path غير موجود أو أنه وصلة رمزية معلقة.

ENOMEM
    ذاكرة النواة المتوفرة غير كافية.

ENOSPC
    الجهاز المحتوي على path ليس لديه مساحة للدليل الجديد.

ENOSPC
    لا يمكن إنشاء الدليل الجديد لأن حصة القرص للمستخدم قد استُنفدت.

ENOTDIR
    المكون المستخدم كدليل في path ليس دليلاً في الواقع.

ENOTDIR
    (mkdirat()) path نسبي و dirfd هو واصف ملف يشير إلى ملف غير دليل.

EPERM
    نظام الملفات المحتوي على path لا يدعم إنشاء الدلائل.

EROFS
    يشير path إلى ملف في نظام ملفات للقراءة فقط.

EOVERFLOW
    تعيينات UID أو GID (انظر user_namespaces(7)) لم تُهيأ.

الإصدارات
تحت لينكس، بالإضافة إلى بتات الإذن، بت S_ISVTX mode يُكرّم أيضًا.

  ملاحظات glibc
على النوى القديمة حيث mkdirat() غير متاح، دالة الغلاف glibc تتراجع إلى استخدام mkdir(). عندما يكون path نسبيًا، تبني glibc اسم مسار بناءً على الرابط الرمزي في /proc/self/fd الذي يتوافق مع الوسيط dirfd.

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

التاريخ

mkdir()
    4.2BSD, SVr4, POSIX.1-1988.

mkdirat()
    glibc 2.4, Linux 2.6.16, POSIX.1-2008.

ملاحظات
توجد العديد من العيوب في البروتوكول الأساسي لـ NFS. بعضها يؤثر على mkdir().

انظر أيضًا
mkdir(1), chmod(2), chown(2), mknod(2), mount(2), rmdir(2), stat(2), umask(2), unlink(2), acl(5), path_resolution(7)

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

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

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