Scroll to navigation

mkdir(2) System Calls Manual 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 للإشارة إلى الخطأ.

الأخطاء

الدليل الأب لا يسمح بإذن الكتابة للعملية، أو أحد الدلائل في path لم يسمح بإذن البحث. (انظر أيضًا path_resolution(7).)
(mkdirat()) path نسبي لكن dirfd ليس AT_FDCWD ولا واصف ملف صالح.
استُنفدت حصة المستخدم من كتل القرص أو الفهارس (inodes) على نظام الملفات.
path موجود بالفعل (ليس بالضرورة كدليل). يشمل هذا الحالة حيث path هو رابط رمزي، سواء كان معلقًا أم لا.
المسار path يشير إلى خارج مساحة العناوين التي يمكن الوصول إليها.
المكون النهائي ("basename") لـ path للدليل الجديد غير صالح (مثلًا، يحتوي على أحرف غير مسموح بها بواسطة نظام الملفات الأساسي).
وُجد عدد كبير جدًا من الوصلات الرمزية أثناء تحليل path.
عدد الروابط إلى الدليل الأب سيتجاوز LINK_MAX.
المسار path كان طويلاً جداً.
مكون الدليل في path غير موجود أو أنه وصلة رمزية معلقة.
ذاكرة النواة المتوفرة غير كافية.
الجهاز المحتوي على path ليس لديه مساحة للدليل الجديد.
لا يمكن إنشاء الدليل الجديد لأن حصة القرص للمستخدم قد استُنفدت.
المكون المستخدم كدليل في path ليس دليلاً في الواقع.
(mkdirat()) path نسبي و dirfd هو واصف ملف يشير إلى ملف غير دليل.
نظام الملفات المحتوي على path لا يدعم إنشاء الدلائل.
يشير path إلى ملف في نظام ملفات للقراءة فقط.
تعيينات UID أو GID (انظر user_namespaces(7)) لم تُهيأ.

الإصدارات

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

ملاحظات glibc

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

المعايير

POSIX.1-2024.

التاريخ

4.2BSD, SVr4, POSIX.1-1988.
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 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

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

11 فبراير 2026 صفحات دليل لينكس 6.18