واصف الملف
المحتويات
على سبيل التعريف، واصف الملف (File Descriptor) في أنظمة التشغيل لينكس أو يونكس هو مؤشر على اتصال يتم الحفاظ عليه من قبل النواة لأداء عمليات الإدخال/الإخراج. في أنظمة التشغيل المعتمدة على ويندوز، يُعرف باسم "مقبض الملف" (filehandle). وهو يمثل الاتصال (عادةً بملف) بين نظام التشغيل وأداء عمليات الإدخال/الإخراج للبيانات (Bytes). بشكل افتراضي، أول ثلاثة أوصاف للملفات في Linux هي:
وفي السياق ذاته، أوصاف الملفات هي جزء من واجهة برمجة التطبيقات POSIX. ويجب أن يكون لدى كل عملية في Unix (باستثناء العمليات الخلفية أو ما يعرف بـ daemons) ثلاثة أوصاف ملفات قياسية تتوافق مع الثلاثة تدفقات القياسية:
إضافةً إلى ذلك، عادةً ما تكون قيم أوصاف الملفات أعداد صحيحة غير سالبة، بينما تُستعمل القيم السالبة للدلالة على "عدم وجود قيمة" أو لتمثيل حالات الخطأ.
at عمليات اللواحق
ومن ناحية أخرى، تمت إضافة سلسلة من العمليات الجديدة إلى الكثير من الأنظمة الحديثة الشبيهة بنظام يونكس، إلى جانب الكثير من مكتبات C، ليتم توحيدها في إصدار مستقبلي من POSIX . تشير اللاحقة at إلى أن الوظيفة تأخذ وسيطة أولى إضافية توفر موصوف ملف يتم من خلاله حل المسارات النسبية ، وبالتالي تصبح النماذج التي تفتقر إلى اللاحقة at معادلة لتمرير موصوف ملف يتوافق مع دليل العمل الحالي. الهدف من هذه العمليات الجديدة هو الدفاع ضد فئة معينة من هجمات TOCTOU .
أوصاف الملفات كقدرات
وفي هذا السياق، تتصرف أوصاف ملفات يونكس بطرق عديدة كقدرات . يمكن تمريرها بين العمليات عبر مآخذ نطاق Unix باستخدام نداء النظام sendmsg . لاحظ، مع ذلك، أن ما يتم تمريره فعليًا هو إشارة إلى "وصف ملف مفتوح" له حالة قابلة للتغيير (إزاحة الملف، وحالة الملف وعلامات الوصول). يؤدي هذا إلى تعقيد الاستخدام الآمن لواصفات الملفات كقدرات، حيث عندما تتشارك البرامج في الوصول إلى نفس وصف الملف المفتوح، فيمكنها التدخل في استخدام بعضها البعض له عن طريق تغيير إزاحته أو ما إذا كان حاجبًا أم غير حاجب، مثلًا. في أنظمة التشغيل المصممة خصيصًا كأنظمة قدرات، نادرًا ما توجد حالة قابلة للتغيير مرتبطة بالقدرة نفسها.
ملخص
وفي هذا السياق، في الأنظمة المشابهة لـ Unix، يمكن أن تشير أوصاف الملفات إلى أي نوع من ملفات Unix المسمّاة في نظام الملفات. إلى جانب الملفات العادية، يتضمن ذلك الأدلة (directories)، وأجهزة الكتل (block devices) والأجهزة الرمزية (character devices) التي تُعرف كذلك بـ"الملفات الخاصة" (special files)، ومقابس نطاق Unix (Unix domain sockets)، والأنابيب المسماة (named pipes). كما يمكن لأوصاف الملفات أن تشير إلى كائنات أخرى لا تكون موجودة عادةً في نظام الملفات، مثل الأنابيب المجهولة (anonymous pipes) ومقابس الشبكة (network sockets).
في هذا الإطار، في التنفيذ التقليدي لنظام Unix، تقوم أوصاف الملفات (File Descriptors) بعملية الفهرسة في جدول أوصاف ملفات خاص بكل عملية يُدار بواسطة النواة، والذي يقوم بدوره بفهرسة جدول ملفات على مستوى النظام بأكمله يُعرف بـ"جدول الملفات" (File Table)، ويحتوي على الملفات المفتوحة بواسطة جميع العمليات. يسجل هذا الجدول وضعية فتح الملف (أو المورد الآخر) مثل: للقراءة، الكتابة، الإلحاق، وربما أوضاع أخرى. كما يقوم كذلك بالفهرسة في جدول ثالث يسمى "جدول الإينود" (inode table) الذي يصف الملفات الفعلية الأساسية.
في هذا الإطار، لأداء عمليات الإدخال أو الإخراج، تقوم العملية بتمرير وصف الملف إلى النواة عبر نداء نظام (System Call)، حيث تصل النواة إلى الملف نيابة عن العملية. العملية نفسها ليس لديها وصول مباشر إلى جداول الملفات أو جداول الإينود.
كذلك، عادةً ما يتضمن هيكل بيانات FILE في مكتبة الإدخال/الإخراج القياسية C موصوف ملف منخفض المستوى للكائن المعني على أنظمة شبيهة بنظام Unix. يوفر هيكل البيانات الإجمالي تجريدًا إضافيًا ويعرف بدلاً من ذلك باسم مقبض الملف.
كذلك، في نظام Linux، يمكن الوصول إلى مجموعة أوصاف الملفات المفتوحة في عملية معينة من خلال المسار `/proc/PID/fd/`، حيث يمثل `PID` معرف العملية. وصف الملف `/proc/PID/fd/0` يمثل الإدخال القياسي (stdin)، و`/proc/PID/fd/1` يمثل الإخراج القياسي (stdout)، و`/proc/PID/fd/2` يمثل الأخطاء القياسية (stderr). كاختصار لهذه المسارات، يمكن لأي عملية جارية الوصول إلى أوصاف ملفاتها الخاصة عبر المجلدات `/proc/self/fd` و`/dev/fd`.
العمليات على أوصاف الملفات
كذلك، تتضمن القائمة التالية العمليات النموذجية على موصوفات الملفات على أنظمة التشغيل الحديثة الشبيهة بنظام يونكس . يتم إعلان أغلب هذه الوظائف في رأس ، ولكن بعضها يكون في رأس بدلاً من ذلك.
,
,
ومن جهة أخرى، , (also used for sending FDs to other processes over a Unix domain socket)
إنشاء أوصاف الملفات
- (Linux)
- (Linux)
- (Linux)
- (Linux)
- (Linux)
- (Linux)
- (Linux)
- (Linux)
- (with flag CLONE_PIDFD, Linux)
- (Linux)
- (Linux)
- (BSD)
- (kFreeBSD)
- اشتقاق أوصاف الملفات
- العمليات على موصوف ملف واحد
- ,
- ,
- ,
لسوف
ومن ناحية أخرى، كتلة التحكم في الملفات (FCB) - مخطط بديل في CP/M والإصدارات المبكرة من DOS
,
- , (Linux)
- , (Linux)
- (Linux)
- (Linux)
- (Linux)
- (Linux)
- (kFreeBSD)
- (with P_PIDFD ID type, Linux)
- (stdio function:converts file descriptor to FILE*)
- (stdio function: prints to file descriptor)
متنوع
من جانب آخر، ioctl (مجموعة كبيرة من العمليات المتنوعة على موصوف ملف واحد، غالبًا ما يرتبط بجهاز)
العمليات التي تعدل حالة العملية
- (maps ranges of a file into the process's address space)
- قفل الملف
- and
إضافةً إلى ذلك، (sets the process's current working directory based on a directory file descriptor)
العمليات على جدول وصف الملف
(for Linux)
ومن ناحية أخرى، (BSD and Solaris only; deletes all file descriptors greater than or equal to specified number)
وفي هذا الصدد، , (Close fd1 if necessary, and make file descriptor fd1 point to the open file of fd2)
كذلك، التُستعمل الدالة لإجراء عمليات مختلفة على موصوف الملف، اعتمادًا على وسيطة الأمر التي تم تمريرها إليه. توجد أوامر للحصول على السمات المرتبطة بوصف الملف وتعيينها، بما في ذلك و .
وفي هذا الصدد، (duplicates an existing file descriptor guaranteeing to be the lowest number available file descriptor)
المقابس
(shuts down one or both halves of a full duplex connection)
(creates a new file descriptor for an incoming connection)
العمليات على ملفات تعريف متعددة
يختار ،
- ، ، (Linux، يتطلب ملف epoll واحد للانتظار على الكثير من ملفات الوصف الأخرى)
- epoll_ctl (لنظام Linux)
- kqueue (لأنظمة تعتمد على BSD).
- الوصل ، (لنظام Linux)
- (لنظام Linux)
استطلاع ،
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟