📄 ملف 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: تغلق المقبض لاستخدامه لاحقاً.