في Posix كيف يتم استخدام النوع dev_t؟
سؤال
ما أبحث عنه هو معنى هذا النوع وما هي الواجهة التي يمكن استخدامها.
تم توضيح ذلك في مواصفات Posix dev_t
يستخدم لمعرفات الجهاز.ومع ذلك، ما الذي يعنيه معرف الجهاز لأي كائن موصوف بواسطة مسار، والذي يمكن أن يكون ملفًا أو دليلًا أو fifo أو جهازًا فعليًا؟
على سبيل المثال، الدعوة stat()
يجب أن تعطيك بنية تتضمن عضوًا من هذا النوع؛ويمكنك تحديد أي نوع من الكائنات في نظام الملفات الخاص بك.يجب أن يكون لمعرف الجهاز معاني مختلفة لأنواع الملفات المختلفة.
المحلول
الاستخدام الوحيد ل dev_t
في الغالبية العظمى من البرامج (تلك البرامج المحمولة وغير المتصلة بنظام تشغيل واحد) يتم تحديد أن اسمي ملفين أو واصفي ملف يشيران إلى نفس الملف الأساسي.وهذا صحيح إذا وفقط إذا st_ino
و st_dev
إدخالات للملفين stat
الهياكل تتطابق مع بعضها البعض.
أساسًا، st_dev
يخبرنا عن "الجهاز" (على سبيل المثالالقسم المُثبت، ومشاركة الشبكة، وما إلى ذلك) يوجد الملف عليه، و st_ino
هو معرف فريد للملف ضمن سياق جهاز واحد.
نصائح أخرى
في الواقع، هناك اثنان dev_t
-الحقول المكتوبة في struct stat
:
st_dev
هو "[د] معرف الجهاز الذي يحتوي على ملف"، لذلك إذا كان هناك ملفان لهما نفس الشيءst_dev
, ، فهما موجودان على نفس نظام الملفات.st_rdev
هو معرف الجهاز الخاص بالجهاز الذي يُشار إليه بحرف أو ملف خاص بلوك، على سبيل المثال.الملفات التي يتم مواجهتها بشكل شائع في/dev
.ليس له معنى بالنسبة لأنواع أخرى من الملفات.
داخل kernel، يتم استخدام نوع DEV_T الذي يعرف فيه لعقد أرقام الجهاز (الرئيسية / القاصر).DEV_T هو كمية 32 بت مع 12 بت توضع جانبا للرقم الرئيسي و 20 للرقم البسيط.