- trixie-backports 4.31.0-1~bpo13+1
- testing 4.31.0-1
- unstable 4.31.0-1
| mknod(2) | System Calls Manual | mknod(2) |
الاسم¶
mknod, mknodat - إنشاء ملف خاص أو عادي
المكتبة¶
مكتبة سي المعيارية (libc، -lc)
موجز¶
#include <sys/stat.h>
int mknod(const char *pathname, mode_t mode, dev_t dev);
#include <fcntl.h> /* تعريف ثوابت AT_* */ #include <sys/stat.h>
int mknodat(int dirfd, const char *pathname, mode_t mode, dev_t dev);
mknod():
_XOPEN_SOURCE >= 500
|| /* منذ glibc 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
الوصف¶
استدعاء النظام mknod() ينشئ عقدة نظام ملفات (ملف، ملف جهاز خاص، أو أنبوب مسمى) باسم pathname، بسمات محددة بواسطة 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)؛ وإلا يتم تجاهله.
إذا كان pathname موجودًا بالفعل، أو كان رابطًا رمزيًا، يفشل هذا الاستدعاء مع خطأ EEXIST.
ستملك العقدة المنشأة حديثًا بواسطة معرف المستخدم الفعّال للعملية. إذا كان الدليل المحتوي على العقدة يحتوي على بت set-group-ID مضبوطًا، أو إذا كان نظام الملفات موصولًا بدلالات مجموعة BSD، سترث العقدة الجديدة ملكية المجموعة من الدليل الأصلي؛ وإلا ستملك بواسطة معرف المجموعة الفعّال للعملية.
mknodat()¶
يعمل استدعاء النظام mknodat() بنفس الطريقة تمامًا مثل mknod()، باستثناء الاختلافات الموصوفة هنا.
إذا كان اسم المسار المعطى في pathname نسبيًا، يُفسر بالنسبة إلى الدليل المشار إليه بواسطة واصف الملف dirfd (بدلاً من التفسير بالنسبة إلى دليل العمل الحالي للعملية المستدعية، كما يفعل mknod() لاسم مسار نسبي).
إذا كان pathname نسبيًا و dirfd هو القيمة الخاصة AT_FDCWD، يُفسر pathname بالنسبة إلى دليل العمل الحالي للعملية المستدعية (مثل mknod()).
إذا كان اسم المسار pathname مطلقاً، فُيتجاهل dirfd.
انظر openat(2) لشرح الحاجة إلى mknodat().
قيمة الإرجاع¶
يعيد mknod() و mknodat() صفرًا عند النجاح. عند الخطأ، يتم إرجاع -1 ويتم تعيين errno للإشارة إلى الخطأ.
الأخطاء¶
- EACCES
- لا يسمح الدليل الأب بصلاحية الكتابة للعملية، أو أن أحد الأدلة في بادئة المسار لـ pathname لم يسمح بصلاحية البحث. (انظر أيضًا path_resolution(7).)
- EBADF
- (mknodat()) pathname نسبي لكن dirfd ليس AT_FDCWD ولا واصف ملف صالح.
- EDQUOT
- استُنفدت حصة المستخدم من كتل القرص أو الفهارس (inodes) على نظام الملفات.
- EEXIST
- pathname موجود مسبقًا. يتضمن ذلك الحالة التي يكون فيها pathname وصلة رمزية، سواء كانت معلقة أم لا.
- EFAULT
- يشير pathname إلى خارج مساحة العناوين المتاحة لك.
- EINVAL
- طلب mode إنشاء شيء غير ملف عادي، ملف جهاز خاص، FIFO أو مقبس.
- ELOOP
- وُجه عدد كبير جدًا من الروابط الرمزية عند حل pathname.
- ENAMETOOLONG
- مسار الملف pathname كان طويلاً جداً.
- ENOENT
- مكون الدليل في pathname غير موجود أو أنه وصلة رمزية معلقة.
- ENOMEM
- ذاكرة النواة المتوفرة غير كافية.
- ENOSPC
- الجهاز الذي يحتوي على pathname ليس لديه مساحة للعقدة الجديدة.
- ENOTDIR
- المكون المستخدم كدليل في pathname ليس دليلاً في الواقع.
- ENOTDIR
- (mknodat()) pathname نسبي و dirfd هو واصف ملف يشير إلى ملف غير دليل.
- EPERM
- طلب mode إنشاء شيء غير ملف عادي، FIFO (أنبوب مسمى)، أو مقبس نطاق UNIX، والمستدعي ليس له صلاحية (لينكس: لا يملك القدرة CAP_MKNOD)؛ يُرجع أيضًا إذا كان نظام الملفات الذي يحتوي على pathname لا يدعم نوع العقدة المطلوبة.
- EROFS
- يشير pathname إلى ملف على نظام ملفات للقراءة فقط.
الإصدارات¶
يقول POSIX.1-2001: "الاستخدام المحمول الوحيد لـ mknod() هو إنشاء ملف FIFO خاص. إذا لم يكن mode هو S_IFIFO أو dev ليس 0، فإن سلوك mknod() غير محدد." ومع ذلك، في الوقت الحاضر لا ينبغي أبدًا استخدام mknod() لهذا الغرض؛ ينبغي استخدام mkfifo(3)، وهي دالة محددة خصيصًا لهذا الغرض.
تحت لينكس، لا يمكن استخدام mknod() لإنشاء الدلائل. ينبغي إنشاء الدلائل باستخدام mkdir(2).
المعايير¶
POSIX.1-2008.
التاريخ¶
ملاحظات¶
توجد عيوب كثيرة في البروتوكول الأساسي لـ 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.
| 2 مايو 2024 | صفحات دليل لينكس 6.9.1 |