Skip to content

← العودة لمجلد vfs_server

📄 ملف handles.rs (مدير المقابض) ​

لأن عدة تطبيقات قد تفتح نفس الملف في نفس الوقت وتقرأ من أماكن مختلفة، يجب أن يكون هناك ما يسمى "بالمقبض" (File Descriptor / Handle) لتتبع حالة القراءة الخاصة بكل تطبيق.

1. هيكل المقبض (FileDescriptor) ​

rust
pub struct FileDescriptor {
    pub owner_port: usize,
    pub path: [u8; 128],
    pub offset: u32,
    pub in_use: bool,
}

يحتفظ كل مقبض باسم التطبيق الذي يملكه (owner_port)، مسار الملف المفتوح، ومؤشر القراءة offset لتذكر أين وصل التطبيق في القراءة.

2. جدول المقابض (HandleTable) ​

يتم حجز مساحة ثابتة لـ 64 مقبض:

rust
pub struct HandleTable {
    fds: [FileDescriptor; 64],
}
  • دالة alloc_handle: تبحث عن أول مقبض فارغ (in_use = false) وتعطيه للتطبيق.
  • دالة get_mut: تسمح بجلب المقبض وتحديث الـ offset الخاص به عند القراءة.
  • دالة free_handle: تغلق المقبض لاستخدامه لاحقاً.

تم تطويره بحب بواسطة مجتمع Qtoom.