| unlink(2) | System Calls Manual | unlink(2) |
الاسم¶
unlink, unlinkat - حذف اسم وربما الملف الذي يشير إليه
المكتبة¶
مكتبة سي المعيارية (libc، -lc)
موجز¶
#include <unistd.h>
int unlink(const char *pathname);
#include <fcntl.h> /* تعريف ثوابت AT_* */ #include <unistd.h>
int unlinkat(int dirfd, const char *pathname, int flags);
unlinkat():
منذ glibc 2.10:
_POSIX_C_SOURCE >= 200809L
قبل glibc 2.10:
_ATFILE_SOURCE
الوصف¶
unlink() يحذف اسمًا من نظام الملفات. إذا كان هذا الاسم هو آخر رابط لملف ولا توجد أي عمليات تفتح الملف، يُحذف الملف وتُتاح المساحة التي كان يستخدمها لإعادة الاستخدام.
إذا كان الاسم هو آخر رابط لملف ولكن لا تزال بعض العمليات تفتح الملف، سيبقى الملف موجودًا حتى يُغلق آخر واصف ملف يشير إليه.
إذا كان الاسم يشير إلى رابط رمزي، فسَيُزَالُ الرابط.
إذا كان الاسم يشير إلى مقبس أو FIFO أو جهاز، يُزال اسمه ولكن العمليات التي تفتح الكائن قد تستمر في استخدامه.
unlinkat()¶
يعمل استدعاء النظام unlinkat() بنفس الطريقة تمامًا مثل unlink() أو rmdir(2) (اعتمادًا على ما إذا كانت flags تتضمن العلم AT_REMOVEDIR أم لا) باستثناء الاختلافات الموصوفة هنا.
إذا كان اسم المسار المعطى في pathname نسبيًا، فسيُفسر بالنسبة إلى الدليل المشار إليه بواسطة واصف الملف dirfd (بدلاً من تفسيره بالنسبة إلى دليل العمل الحالي للعملية المستدعية، كما تفعل unlink() و rmdir(2) لاسم مسار نسبي).
إذا كان اسم المسار المعطى في pathname نسبيًا وكان dirfd هو القيمة الخاصة AT_FDCWD، فسيُفسر pathname بالنسبة إلى دليل العمل الحالي للعملية المستدعية (مثل unlink() و rmdir(2)).
إذا كان مسار الملف المعطى في pathname مطلقاً، فسيُتجاهَل dirfd.
flags هو قناع بت يمكن تحديده إما كـ 0، أو عن طريق ORing لقيم الأعلام التي تتحكم في عملية unlinkat(). حاليًا، يُعرف علم واحد فقط:
- AT_REMOVEDIR
- بشكل مبدئي، تنفذ unlinkat() ما يعادل unlink() على pathname. إذا تم تحديد العلم AT_REMOVEDIR، فتنفذ ما يعادل rmdir(2) على pathname.
انظر openat(2) لشرح الحاجة إلى unlinkat().
قيمة الإرجاع¶
عند النجاح، يُعاد الصفر. وعند حدوث خطأ، يُعاد الرقم -1، ويُضبط errno للإشارة إلى الخطأ.
الأخطاء¶
- EACCES
- لا يُسمح بوصول الكتابة إلى الدليل المحتوي على pathname لـ UID الفعال للعملية، أو أن أحد الأدلة في pathname لم يسمح بإذن البحث. (انظر أيضًا path_resolution(7).)
- EBUSY
- لا يمكن فك رابط الملف pathname لأنه يُستخدم بواسطة النظام أو عملية أخرى؛ على سبيل المثال، هو نقطة وصل أو أن برنامج عميل NFS أنشأه لتمثيل عقدة نشطة ولكنها بدون اسم ("NFS silly renamed").
- EFAULT
- يشير pathname إلى خارج مساحة العناوين المتاحة لك.
- EIO
- حدث خطأ إدخال/إخراج.
- EISDIR
- يشير pathname إلى دليل. (هذه هي القيمة غير POSIX التي تُرجع منذ Linux 2.1.132.)
- ELOOP
- تمت مصادفة عدد كبير جدًا من الروابط الرمزية أثناء ترجمة pathname.
- ENAMETOOLONG
- مسار الملف pathname كان طويلاً جداً.
- ENOENT
- مكون في pathname غير موجود أو هو رابط رمزي معلق، أو أن pathname فارغ.
- ENOMEM
- ذاكرة النواة المتوفرة غير كافية.
- ENOTDIR
- المكون المستخدم كدليل في pathname ليس دليلاً في الواقع.
- EPERM
- النظام لا يسمح بحذف الدلائل، أو حذف الدلائل يتطلب صلاحيات لا تملكها العملية المستدعية. (هذا هو خطأ العودة الموصوف من POSIX؛ كما ذكر أعلاه، يعيد Linux EISDIR لهذه الحالة.)
- EPERM (Linux فقط)
- نظام الملفات لا يسمح بحذف الملفات.
- EPERM أو EACCES
- الدليل المحتوي على pathname لديه البت اللاصق (S_ISVTX) مضبوطًا و UID الفعال للعملية ليس UID الملف المراد حذفه ولا UID الدليل المحتوي عليه، والعملية ليست مميزة (Linux: لا تملك القدرة CAP_FOWNER).
- EPERM
- الملف المراد حذفه مُعلّم على أنه غير قابل للتغيير أو للإلحاق فقط. (انظر FS_IOC_SETFLAGS(2const).)
- EROFS
- يشير pathname إلى ملف على نظام ملفات للقراءة فقط.
نفس الأخطاء التي تحدث لـ unlink() و rmdir(2) يمكن أن تحدث أيضًا لـ unlinkat(). يمكن أن تحدث الأخطاء الإضافية التالية لـ unlinkat():
المعايير¶
POSIX.1-2008.
التاريخ¶
- unlink()
- SVr4، 4.3BSD، POSIX.1-2001.
- unlinkat()
- POSIX.1-2008. لينكس 2.6.16، glibc 2.4.
glibc¶
على النوى الأقدم حيث unlinkat() غير متوفرة، تعود دالة الغلاف glibc إلى استخدام unlink() أو rmdir(2). عندما يكون pathname اسم مسار نسبي، تبني 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.
| 13 يونيو 2024 | صفحات دليل لينكس 6.9.1 |