| mknod(2) | System Calls Manual | mknod(2) |
الاسم¶
mknod, mknodat - إنشاء ملف خاص أو عادي
المكتبة¶
مكتبة سي المعيارية (libc، -lc)
موجز¶
#include <sys/stat.h>
int mknod(const char *path, mode_t mode, dev_t dev);
#include <fcntl.h> /* تعريف ثوابت AT_* */ #include <sys/stat.h>
int mknodat(int dirfd, const char *path, mode_t mode, dev_t dev);
mknod():
_XOPEN_SOURCE >= 500
|| /* منذ glibc 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
الوصف¶
استدعاء النظام mknod() ينشئ عقدة نظام ملفات (ملف، ملف جهاز خاص، أو أنبوب مسمى) باسم path، بسمات محددة بواسطة mode و dev.
الوسيطة mode تحدد كلاً من وضع الملف المستخدم ونوع العقدة المراد إنشاؤها. ينبغي أن تكون مزيجًا (باستخدام OR على مستوى البت) من أحد أنواع الملفات المدرجة أدناه وصفر أو أكثر من بتات وضع الملف المدرجة في inode(7).
يتم تعديل وضع الملف بواسطة umask للعملية بالطريقة المعتادة: في غياب ACL مبدئي، تكون أذونات العقدة المنشأة (mode & ~umask).
يجب أن يكون نوع الملف واحدًا من S_IFREG، S_IFCHR، S_IFBLK، S_IFIFO، أو S_IFSOCK لتحديد ملف عادي (سيتم إنشاؤه فارغًا)، ملف جهاز حرفي، ملف جهاز كتلي، FIFO (أنبوب مسمى)، أو مقبس نطاق UNIX، على التوالي. (نوع الملف الصفري يعادل النوع S_IFREG.)
إذا كان نوع الملف هو S_IFCHR أو S_IFBLK، فإن dev يحدد الأرقام الرئيسية والثانوية لملف الجهاز الخاص المنشأ حديثًا (قد يكون makedev(3) مفيدًا لبناء القيمة لـ dev)؛ وإلا يتم تجاهله.
إذا كان path موجودًا بالفعل، أو كان رابطًا رمزيًا، يفشل هذا الاستدعاء مع خطأ EEXIST.
ستملك العقدة المنشأة حديثًا بواسطة معرف المستخدم الفعّال للعملية. إذا كان الدليل المحتوي على العقدة يحتوي على بت set-group-ID مضبوطًا، أو إذا كان نظام الملفات موصولًا بدلالات مجموعة BSD، سترث العقدة الجديدة ملكية المجموعة من الدليل الأصلي؛ وإلا ستملك بواسطة معرف المجموعة الفعّال للعملية.
mknodat()¶
يعمل استدعاء النظام mknodat() بنفس الطريقة تمامًا مثل mknod()، باستثناء الاختلافات الموصوفة هنا.
إذا كان path نسبيًا، فسيتم تفسيره بالنسبة إلى الدليل المشار إليه بواسطة واصف الملف dirfd (بدلاً من نسبته إلى دليل العمل الحالي للعملية المستدعية، كما هو الحال مع mknod() لاسم مسار نسبي).
إذا كان path نسبيًا و dirfd هو القيمة الخاصة AT_FDCWD، فسيتم تفسير path بالنسبة إلى دليل العمل الحالي للعملية المستدعية (مثل mknod()).
إذا كان المسار path مطلقاً، فُيتجاهل dirfd.
انظر openat(2) لشرح الحاجة إلى mknodat().
قيمة الإرجاع¶
يعيد mknod() و mknodat() صفرًا عند النجاح. عند الخطأ، يتم إرجاع -1 ويتم تعيين errno للإشارة إلى الخطأ.
الأخطاء¶
- EACCES
- لا يسمح الدليل الأصلي بإذن الكتابة للعملية، أو أن أحد الدلائل في بادئة المسار لـ path لم يسمح بإذن البحث. (انظر أيضًا path_resolution(7).)
- EBADF
- (mknodat()) path نسبي ولكن dirfd ليس AT_FDCWD ولا واصف ملف صالح.
- EDQUOT
- استُنفدت حصة المستخدم من كتل القرص أو الفهارس (inodes) على نظام الملفات.
- EEXIST
- path موجود مسبقًا. يتضمن ذلك الحالة التي يكون فيها path وصلة رمزية، سواء كانت معلقة أم لا.
- EFAULT
- المسار path يشير إلى خارج مساحة العناوين التي يمكن الوصول إليها.
- EINVAL
- طلب mode إنشاء شيء غير ملف عادي، ملف جهاز خاص، FIFO أو مقبس.
- ELOOP
- وُجد عدد كبير جدًا من الوصلات الرمزية أثناء تحليل path.
- ENAMETOOLONG
- المسار path كان طويلاً جداً.
- ENOENT
- مكون الدليل في path غير موجود أو أنه وصلة رمزية معلقة.
- ENOMEM
- ذاكرة النواة المتوفرة غير كافية.
- ENOSPC
- الجهاز المحتوي على path ليس لديه مساحة للعقدة الجديدة.
- ENOTDIR
- المكون المستخدم كدليل في path ليس دليلاً في الواقع.
- ENOTDIR
- (mknodat()) path نسبي و dirfd هو واصف ملف يشير إلى ملف غير دليل.
- EPERM
- طلب mode إنشاء شيء غير ملف عادي، FIFO (أنبوب مسمى)، أو مقبس نطاق UNIX، والمستدعي ليس له صلاحيات (لينكس: ليس لديه القدرة CAP_MKNOD)؛ يتم إرجاعه أيضًا إذا كان نظام الملفات المحتوي على path لا يدعم نوع العقدة المطلوب.
- EROFS
- يشير path إلى ملف في نظام ملفات للقراءة فقط.
الإصدارات¶
يقول POSIX.1-2001: "الاستخدام المحمول الوحيد لـ mknod() هو إنشاء ملف FIFO خاص. إذا لم يكن mode هو S_IFIFO أو dev ليس 0، فإن سلوك mknod() غير محدد." ومع ذلك، في الوقت الحاضر لا ينبغي أبدًا استخدام mknod() لهذا الغرض؛ ينبغي استخدام mkfifo(3)، وهي دالة محددة خصيصًا لهذا الغرض.
تحت لينكس، لا يمكن استخدام mknod() لإنشاء الدلائل. ينبغي إنشاء الدلائل باستخدام mkdir(2).
المعايير¶
POSIX.1-2024 XSI.
التاريخ¶
ملاحظات¶
توجد عيوب كثيرة في البروتوكول الأساسي لـ NFS. بعضها يؤثر على mknod() و mknodat().
انظر أيضًا¶
mknod(1)، chmod(2)، chown(2)، fcntl(2)، mkdir(2)، mount(2)، socket(2)، stat(2)، umask(2)، unlink(2)، makedev(3)، mkfifo(3)، acl(5)، path_resolution(7)
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 11 فبراير 2026 | صفحات دليل لينكس 6.18 |