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);

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

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.

التاريخ

mknod()
    SVr4, 4.4BSD, SUSv1, POSIX.1-2001 XSI (ولكن انظر الإصدارات).

mknodat()
    glibc 2.4, Linux 2.6.16, POSIX.1-2008 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 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

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