Scroll to navigation

symlink(2) System Calls Manual symlink(2)

الاسم

symlink, symlinkat - إنشاء اسم جديد لملف

المكتبة

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

موجز

#include <unistd.h>
int symlink(const char *target, const char *linkpath);
#include <fcntl.h>           /* تعريف ثوابت AT_* */
#include <unistd.h>
int symlinkat(const char *target, int newdirfd, const char *linkpath);

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

symlink():


_XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L
|| /* glibc <= 2.19: */ _BSD_SOURCE

symlinkat():


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

الوصف

تنشئ symlink() رابطًا رمزيًا باسم linkpath يحتوي على السلسلة target.

تُفسر الروابط الرمزية وقت التشغيل كما لو أن محتويات الرابط قد استُبدلت في المسار المُتبع للعثور على ملف أو دليل.

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

قد يشير الرابط الرمزي (المعروف أيضًا بالرابط اللين) إلى ملف موجود أو إلى ملف غير موجود؛ الحالة الأخيرة تُعرف بالرابط المعلق.

صلاحيات الرابط الرمزي غير ذات صلة؛ تُتجاهل الملكية عند اتباع الرابط (إلا عند تمكين ميزة protected_symlinks، كما هو موضح في proc(5))، ولكن تُفحص عند طلب إزالة الرابط أو إعادة تسميته وكان الرابط في دليل معيّنة البتة اللاصقة (S_ISVTX).

إذا كان linkpath موجودًا، فلن يُستبدل.

symlinkat()

تعمل استدعاء النظام symlinkat() بنفس طريقة symlink()، باستثناء الاختلافات الموصوفة هنا.

إذا كان اسم المسار المُعطى في linkpath نسبيًا، فإنه يُفسر نسبة إلى الدليل المشار إليه بواصف الملف newdirfd (بدلاً من نسبته إلى دليل العمل الحالي للعملية المستدعية، كما تفعل symlink() لاسم مسار نسبي).

إذا كان linkpath نسبيًا و newdirfd هو القيمة الخاصة AT_FDCWD، فإن linkpath يُفسر نسبة إلى دليل العمل الحالي للعملية المستدعية (مثل symlink()).

إذا كان linkpath مطلقًا، فإن newdirfd يُتجاهل.

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

قيمة الإرجاع

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

الأخطاء

وصل الكتابة إلى الدليل المحتوي على linkpath مرفوض، أو أحد الدلائل في بادئة مسار linkpath لم يسمح بصلاحية البحث. (انظر أيضًا path_resolution(7).)
(symlinkat()) linkpath نسبي ولكن newdirfd ليس AT_FDCWD ولا واصف ملف صالح.
حصة المستخدم من الموارد على نظام الملفات قد استُنفدت. قد تكون الموارد عقد فهرسة أو كتل قرص، اعتمادًا على تطبيق نظام الملفات.
linkpath موجود بالفعل.
target أو linkpath يشير إلى خارج مساحة العنوان القابلة للوصول.
حدث خطأ إدخال/إخراج.
وُجد عدد كبير جدًا من الروابط الرمزية أثناء حل linkpath.
target أو linkpath طويل جدًا.
مكون دليل في linkpath غير موجود أو هو رابط رمزي معلق، أو target أو linkpath سلسلة فارغة.
(symlinkat()) linkpath اسم مسار نسبي و newdirfd يشير إلى دليل قد حُذف.
ذاكرة النواة المتوفرة غير كافية.
الجهاز الذي يحتوي على الملف ليس به مساحة لمدخل الدليل الجديد.
مكون يُستخدم كدليل في linkpath ليس في الواقع دليلاً.
(symlinkat()) linkpath نسبي و newdirfd واصف ملف يشير إلى ملف غير دليل.
نظام الملفات المحتوي على linkpath لا يدعم إنشاء الروابط الرمزية.
linkpath على نظام ملفات للقراءة فقط.

المعايير

POSIX.1-2024.

التاريخ

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

ملاحظات glibc

على النوى القديمة حيث symlinkat() غير متوفرة، تلجأ دالة الغلاف glibc إلى استخدام symlink(). عندما يكون linkpath اسم مسار نسبي، تبني glibc اسم مسار استنادًا إلى الرابط الرمزي في /proc/self/fd الذي يقابل وسيطة newdirfd.

ملاحظات

لا يُجرى أي فحص لـ target.

حذف الاسم المشار إليه بواسطة رابط رمزي سيحذف الملف فعليًا (ما لم يكن له روابط صلبة أخرى). إذا لم تكن هذه السلوكية مرغوبة، استخدم link(2).

انظر أيضًا

ln(1), namei(1), lchown(2), link(2), lstat(2), open(2), readlink(2), rename(2), unlink(2), path_resolution(7), symlink(7)

ترجمة

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

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

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

8 فبراير 2026 صفحات دليل لينكس (لم تصدر بعد)