واصف الملف
في أنظمة تشغيل الكمبيوتر Unix و Unix-like ، فإن واصف الملف ( FD ، بشكل أقل شيوعًا fildes [ 1 ] ) هو معرف فريد للعملية ( مقبض ) لملف أو مورد إدخال/إخراج آخر ، مثل أنبوب أو مقبس شبكة .
تحتوي واصفات الملفات عادةً على قيم عددية غير سالبة ، مع حجز القيم السالبة للإشارة إلى "عدم وجود قيمة" أو حالات الخطأ.
تُعدّ مُعرّفات الملفات جزءًا من واجهة برمجة تطبيقات POSIX . يجب أن تحتوي كل عملية في نظام Unix (باستثناء ربما البرامج الخفية ) على ثلاثة مُعرّفات ملفات POSIX قياسية، تتوافق مع التدفقات القياسية الثلاثة :
| قيمة عددية صحيحة | اسم | < unistd.h > ثابت رمزي [ 2 ] | < stdio.h > دفق الملف [ 3 ] |
|---|---|---|---|
| 0 | المدخلات القياسية | STDIN_FILENO | stdin |
| 1 | المخرجات القياسية | STDOUT_FILENO | stdout |
| 2 | الخطأ المعياري | STDERR_FILENO | stderr |
ملخص

في التطبيق التقليدي لنظام يونكس، يتم فهرسة واصفات الملفات في فهرس لكل عمليةجدول واصفات الملفات الذي يحتفظ به النواة، والذي بدوره يفهرس في جدول على مستوى النظام للملفات التي تفتحها جميع العمليات، ويسمىجدول الملفات . يسجل هذا الجدولطريقةفتح الملف (أو أي مورد آخر): للقراءة، والكتابة، والإضافة، وربما طرق أخرى. كما أنه يُفهرس جدولًا ثالثًا يُسمىجدول العقد (inode)الذي يصف الملفات الأساسية الفعلية. [ 4 ] لإجراء عمليات الإدخال أو الإخراج، تُمرر العملية مُعرّف الملف إلى النواة عبراستدعاء نظام، وتقوم النواة بالوصول إلى الملف نيابةً عن العملية. لا تملك العملية وصولًا مباشرًا إلى جدولي الملفات أو العقد.
في نظام لينكس ، يمكن الوصول إلى مجموعة مُعرّفات الملفات المفتوحة في عملية ما عبر المسار `/usr/files` /proc/PID/fd/، حيث يُمثّل `PID` مُعرّف العملية . مُعرّفات الملفات /proc/PID/fd/0هي stdin`/ usr/ /proc/PID/fd/1files` و`/ usr/files` stdoutو`/ usr/ /proc/PID/fd/2files` stderr. وكاختصار لهذه المُعرّفات، يُمكن لأي عملية قيد التشغيل الوصول إلى مُعرّفات ملفاتها الخاصة عبر المجلدات `/usr/files` /proc/self/fdو` /usr/files` /dev/fd. [ 5 ]
في الأنظمة الشبيهة بنظام يونكس ، يمكن أن تشير مُعرّفات الملفات إلى أي نوع ملف يونكس مُسمى في نظام الملفات. بالإضافة إلى الملفات العادية، يشمل ذلك الدلائل ، وأجهزة الكتل والأحرف (وتُسمى أيضًا "الملفات الخاصة")، ومنافذ نطاق يونكس ، والأنابيب المُسماة . كما يمكن أن تشير مُعرّفات الملفات إلى كائنات أخرى لا توجد عادةً في نظام الملفات، مثل الأنابيب المجهولة ومنافذ الشبكة .
تتضمن بنية البيانات FILEفي مكتبة الإدخال/الإخراج القياسية للغة C عادةً مُعرِّف ملف منخفض المستوى للكائن المعني على أنظمة شبيهة بنظام يونكس. أما بنية البيانات العامة، فتُوفِّر تجريدًا إضافيًا، وتُعرف باسم مُعرِّف الملف .
العمليات على واصفات الملفات
فيما يلي قائمة بالعمليات النموذجية على واصفات الملفات في أنظمة يونكس الحديثة . معظم هذه الدوال مُعلنة في <unistd.h>ملف الرأس، ولكن بعضها مُعلن في <fcntl.h>ملف الرأس الآخر.
إنشاء واصفات الملفات
- يفتح ()
- creat() [ 6 ]
- المقبس()
- يقبل()
- socketpair()
- ماسورة()
- epoll_create() (لينكس)
- signalfd() (لينكس)
- eventfd() (لينكس)
- timerfd_create() (لينكس)
- memfd_create() (لينكس)
- userfaultfd() (لينكس)
- fanotify_init() (لينكس)
- inotify_init() (لينكس)
- clone() (مع علامة CLONE_PIDFD، لينكس)
- pidfd_open() (لينكس)
- open_by_handle_at() (لينكس)
- kqueue() (BSD)
- pdfork() (kFreeBSD)
استخراج واصفات الملفات
- dirfd()
- رقم الملف()
العمليات على واصف ملف واحد
- اقرأ ()، اكتب ()
- readv() , writev()
- pread() ، pwrite()
- recv() ، send()
- recvfrom() ، sendto()
- recvmsg() ، sendmsg() (تستخدم أيضًا لإرسال FDs إلى عمليات أخرى عبر مقبس نطاق Unix)
- recvmmsg() , sendmmsg()
- lseek() ، llseek()
- fstat()
- fstatvfs()
- fchmod()
- fchown()
- ftruncate()
- fsync()
- fdatasync()
- fdopendir()
- fgetxattr() ، fsetxattr() (لينكس)
- flistxattr () ، fremovexattr () (لينكس)
- statx (لينكس)
- setns (لينكس)
- vmsplice() (لينكس)
- pidfd_send_signal() (لينكس)
- pdkill() (kFreeBSD)
- waitid() (مع نوع المعرف P_PIDFD، لينكس)
- fdopen() (دالة الإدخال/الإخراج القياسية: تحول واصف الملف إلى FILE*)
- dprintf() (دالة الإدخال/الإخراج القياسية: تطبع إلى مُعرّف الملف)
عمليات على عدة واصفات ملفات
- select() ، pselect()
- poll() ، ppoll()
- epoll_wait() ، epoll_pwait() ، epoll_pwait2() (في نظام لينكس، يتم استخدام واصف ملف epoll واحد للانتظار على العديد من واصفات الملفات الأخرى)
- epoll_ctl() (لنظام لينكس)
- kqueue() (للأنظمة القائمة على BSD).
- sendfile()
- splice() ، tee() (لنظام Linux)
- copy_file_range() (لنظام لينكس)
العمليات على جدول واصفات الملفات
تُستخدم الدالة fcntl() لتنفيذ عمليات متنوعة على مُعرّف الملف، وذلك بحسب وسيط الأمر المُمرّر إليها. توجد أوامر لجلب وتعيين السمات المرتبطة بمُعرّف الملف، بما في ذلك F_GETFD وF_SETFD وF_GETFL و F_SETFL .
- يغلق()
- closefrom() (لأنظمة BSD و Solaris فقط؛ يحذف جميع واصفات الملفات التي يزيد عددها عن أو يساوي العدد المحدد)
- close_range() (لنظام Linux) [ 7 ]
- dup() (يكرر واصف ملف موجود مع ضمان أن يكون واصف الملف هو الأقل رقمًا المتاح)
- dup2 () , dup3() (أغلق fd1 إذا لزم الأمر، واجعل واصف الملف fd1 يشير إلى الملف المفتوح لـ fd2)
- fcntl (F_DUPFD)
العمليات التي تُعدّل حالة العملية
- fchdir() (يحدد دليل العمل الحالي للعملية بناءً على واصف ملف الدليل)
- mmap () (يقوم بربط نطاقات الملف بمساحة عناوين العملية)
قفل الملفات
- قطيع()
- fcntl() (F_GETLK, F_SETLK and F_SETLKW)
- lockf()
المقابس
- يتصل()
- ربط()
- يستمع()
- accept() (ينشئ واصف ملف جديد لاتصال وارد)
- getsockname()
- getpeername()
- getsockopt()
- setsockopt()
- shutdown() (يقوم بإيقاف تشغيل أحد أو كلا نصفي اتصال مزدوج كامل)
متنوع
- ioctl() (مجموعة كبيرة من العمليات المتنوعة على واصف ملف واحد، وغالبًا ما تكون مرتبطة بجهاز)
atعمليات اللواحق
أُضيفت سلسلة من العمليات الجديدة إلى العديد من أنظمة يونكس الحديثة، بالإضافة إلى العديد من مكتبات لغة C، ليتم توحيدها في إصدار مستقبلي من معيار POSIX . [ 8 ] تشير اللاحقة atإلى أن الدالة تأخذ وسيطًا أولًا إضافيًا يُحدد مُعرّف ملف تُحلّل منه المسارات النسبية ، وبالتالي فإن الصيغ التي لا تحتوي على atاللاحقة تُصبح مُكافئة لتمرير مُعرّف ملف يُطابق دليل العمل الحالي . والغرض من هذه العمليات الجديدة هو الحماية من نوع مُعين من هجمات TOCTOU .
- openat()
- faccessat()
- fchmodat()
- fchownat()
- fstatat()
- futimesat()
- linkat()
- mkdirat()
- mknodat()
- readlinkat()
- إعادة تسمية()
- symlinkat()
- unlinkat()
- mkfifoat()
- fdopendir()
مُعرّفات الملفات كقدرات
تتصرف مُعرّفات الملفات في أنظمة يونكس في كثير من الأحيان كصلاحيات . إذ يُمكن تمريرها بين العمليات عبر مقابس نطاق يونكس باستخدام sendmsg()استدعاء النظام. مع ذلك، تجدر الإشارة إلى أن ما يتم تمريره فعليًا هو مرجع إلى "وصف ملف مفتوح" ذي حالة قابلة للتغيير (إزاحة الملف، وحالة الملف، وعلامات الوصول). يُعقّد هذا الأمر الاستخدام الآمن لمُعرّفات الملفات كصلاحيات، لأنه عندما تتشارك البرامج الوصول إلى نفس وصف الملف المفتوح، يُمكنها التداخل مع استخدام بعضها البعض له عن طريق تغيير إزاحته أو ما إذا كان مانعًا أم غير مانع، على سبيل المثال. [ 9 ] [ 10 ] في أنظمة التشغيل المصممة خصيصًا كأنظمة صلاحيات، نادرًا ما توجد أي حالة قابلة للتغيير مرتبطة بالصلاحية نفسها.
يُعد جدول واصفات الملفات الخاص بعملية يونكس مثالاً على قائمة C.
انظر أيضاً
- fuser (Unix)
- lsof
- كتلة التحكم في الملفات (FCB) – مخطط بديل في نظام CP/M والإصدارات المبكرة من نظام DOS
مراجع
- ↑ مجموعة Open Group . "مواصفات Open Group الأساسية، الإصدار 8، معيار IEEE 1003.1-2024" . تم الاطلاع عليه بتاريخ 14 يوليو 2026 .
- ↑ مجموعة Open Group . "مواصفات Open Group الأساسية، الإصدار 7، معيار IEEE 1003.1-2008، إصدار 2016" . تم الاطلاع عليه بتاريخ 21-09-2017 .
- ↑ مجموعة Open Group. "مواصفات Open Group الأساسية، الإصدار 7، معيار IEEE 1003.1-2008، إصدار 2016" . <stdio.h> . تاريخ الاسترجاع: 21-09-2017 .
- 1 2 باخ، موريس ج. (1986). تصميم نظام التشغيل يونكس ( الطبعة الثامنة). برنتيس هول . الصفحات 92-96 . ISBN 9780132017992.
- ↑ "الأجهزة - ماذا يعني ناتج الأمر 'll /Proc/Self/Fd/' (من 'll /Dev/Fd')؟ "
- ↑ مجموعة Open Group . "مواصفات Open Group الأساسية، الإصدار 7، معيار IEEE 1003.1-2008، إصدار 2018 - creat" . تم الاطلاع عليه بتاريخ 11 أبريل 2019 .
- ↑ ستيفن كيت، مايكل كيريسك. "close_range(2) — صفحة دليل لينكس" . تم الاسترجاع في 22-03-2021 .
- ↑ مجموعة واجهات برمجة التطبيقات الموسعة، الجزء 2. مجموعة Open Group. أكتوبر 2006. ISBN 1931624674.
- ↑ برينكمان، ماركوس (4 فبراير 2009). "بناء جسر: واجهات برمجة تطبيقات المكتبات ومُعرّفات الملفات؟" . cap-talk . تم الاسترجاع في 21 سبتمبر 2017 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ دي بوين بولارد، جوناثان (2007). "لا تقم بتعيين واصفات الملفات المشتركة إلى وضع الإدخال/الإخراج غير الحظر" . تم الاسترجاع في 21-09-2017 .
- بوسيكس
- تقنية نظام ملفات يونكس
