Scroll to navigation

mkdir(2) System Calls Manual mkdir(2)

الاسم

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

المكتبة

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

موجز

#include <sys/stat.h>
int mkdir(const char *pathname, mode_t mode);
#include <fcntl.h>           /* تعريف ثوابت AT_* */
#include <sys/stat.h>
int mkdirat(int dirfd, const char *pathname, mode_t mode);

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

mkdirat():


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

الوصف

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

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

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

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

mkdirat()

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

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

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

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

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

قيمة الإرجاع

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

الأخطاء

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

الإصدارات

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

ملاحظات glibc

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

المعايير

POSIX.1-2008.

التاريخ

SVr4, BSD, POSIX.1-2001.
لينكس 2.6.16، glibc 2.4.

ملاحظات

توجد العديد من العيوب في البروتوكول الأساسي لـ 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.

2 مايو 2024 صفحات دليل لينكس 6.9.1