Scroll to navigation

unlink(2) System Calls Manual unlink(2)

الاسم

unlink, unlinkat - حذف اسم وربما الملف الذي يشير إليه

المكتبة

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

موجز

#include <unistd.h>
int unlink(const char *path);
#include <fcntl.h>           /* تعريف ثوابت AT_* */
#include <unistd.h>
int unlinkat(int dirfd, const char *path, int flags);

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

unlinkat():


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

الوصف

unlink() يحذف اسمًا من نظام الملفات. إذا كان هذا الاسم هو آخر رابط لملف ولا توجد أي عمليات تفتح الملف، يُحذف الملف وتُتاح المساحة التي كان يستخدمها لإعادة الاستخدام.

إذا كان الاسم هو آخر رابط لملف ولكن لا تزال بعض العمليات تفتح الملف، سيبقى الملف موجودًا حتى يُغلق آخر واصف ملف يشير إليه.

إذا كان الاسم يشير إلى رابط رمزي، فسَيُزَالُ الرابط.

إذا كان الاسم يشير إلى مقبس أو FIFO أو جهاز، يُزال اسمه ولكن العمليات التي تفتح الكائن قد تستمر في استخدامه.

unlinkat()

يعمل استدعاء النظام unlinkat() بنفس الطريقة تمامًا مثل unlink() أو rmdir(2) (اعتمادًا على ما إذا كانت flags تتضمن العلم AT_REMOVEDIR أم لا) باستثناء الاختلافات الموصوفة هنا.

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

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

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

flags هو قناع بت يمكن تحديده إما كـ 0، أو عن طريق ORing لقيم الأعلام التي تتحكم في عملية unlinkat(). حاليًا، يُعرف علم واحد فقط:

افتراضيًا، ينفذ unlinkat() ما يعادل unlink() على path. إذا تم تحديد العلم AT_REMOVEDIR، ينفذ ما يعادل rmdir(2) على path.

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

قيمة الإرجاع

عند النجاح، يُعاد الصفر. وعند حدوث خطأ، يُعاد الرقم -1، ويُضبط errno للإشارة إلى الخطأ.

الأخطاء

لا يُسمح بوصول الكتابة إلى الدليل الذي يحتوي على path لـ UID الفعال للعملية، أو أن أحد الدلائل في path لم يسمح بإذن البحث. (انظر أيضًا path_resolution(7).)
لا يمكن حذف path لأنه قيد الاستخدام من قبل النظام أو عملية أخرى؛ على سبيل المثال، هو نقطة وصل أو أن برنامج عميل NFS أنشأه لتمثيل inode نشط ولكن بدون اسم ("NFS silly renamed").
المسار path يشير إلى خارج مساحة العناوين التي يمكن الوصول إليها.
حدث خطأ إدخال/إخراج.
path يشير إلى دليل. (هذه هي القيمة غير POSIX التي تُرجع منذ Linux 2.1.132.)
تمت مواجهة عدد كبير جدًا من الروابط الرمزية في ترجمة path.
المسار path كان طويلاً جداً.
مكون في path غير موجود أو هو رابط رمزي معلق، أو path فارغ.
ذاكرة النواة المتوفرة غير كافية.
المكون المستخدم كدليل في path ليس دليلاً في الواقع.
النظام لا يسمح بحذف الدلائل، أو حذف الدلائل يتطلب صلاحيات لا تملكها العملية المستدعية. (هذا هو خطأ العودة الموصوف من POSIX؛ كما ذكر أعلاه، يعيد Linux EISDIR لهذه الحالة.)
نظام الملفات لا يسمح بحذف الملفات.
الدليل الذي يحتوي على path لديه البت اللاصق (S_ISVTX) مضبوطًا و UID الفعال للعملية ليس UID الملف المراد حذفه ولا UID الدليل الذي يحتويه، والعملية ليست مميزة (Linux: لا تملك القدرة CAP_FOWNER).
الملف المراد حذفه مُعلّم على أنه غير قابل للتغيير أو للإلحاق فقط. (انظر FS_IOC_SETFLAGS(2const).)
يشير path إلى ملف في نظام ملفات للقراءة فقط.

نفس الأخطاء التي تحدث لـ unlink() و rmdir(2) يمكن أن تحدث أيضًا لـ unlinkat(). يمكن أن تحدث الأخطاء الإضافية التالية لـ unlinkat():

المسار path نسبي ولكن dirfd ليس AT_FDCWD ولا واصف ملف صالح.
عُيّنت قيمة علم (flag) غير صالحة في flags.
path يشير إلى دليل، ولم يتم تحديد AT_REMOVEDIR في flags.
المسار path نسبي و dirfd هو واصف ملف يشير إلى ملف غير الدليل.

المعايير

POSIX.1-2024.

التاريخ

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

glibc

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

العلل

يمكن أن تتسبب عيوب في البروتوكول الذي يعتمد عليه NFS في اختفاء غير متوقع للملفات التي لا تزال قيد الاستخدام.

انظر أيضًا

rm(1)، unlink(1)، chmod(2)، link(2)، mknod(2)، open(2)، rename(2)، rmdir(2)، mkfifo(3)، remove(3)، path_resolution(7)، symlink(7)

ترجمة

تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

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

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