Skip to content

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

📄 ملف main.rs (المدير الرئيسي للـ VFS) ​

يبدأ هذا الملف بتسجيل خدمة الـ VFS لدى خادم init، ثم يدخل في حلقة لا نهائية للاستماع لطلبات البرامج الأخرى.

1. التسجيل مع خادم التهيئة ​

rust
let name = b"vfs_server\0\0\0\0\0\0";
let mut init_msg = init::ServiceMsg::new();
init_msg.raw[0] = init::MSG_REGISTER;
init_msg.raw[2..18].copy_from_slice(name);
sys::send(1, &init_msg.raw);

الخادم يرسل رسالة فوراً للمنفذ رقم 1 (وهو المنفذ المحجوز دائماً لخادم init) ليعلن عن وجوده واسمه.

2. معالجة طلبات الملفات (VFS_OPEN, READ, STAT, LIST) ​

في حلقة الاستماع loop، يستقبل الخادم طلبات التطبيقات. بناءً على نوع الطلب، يتم التنفيذ:

  • VFS_OPEN: يبحث عن الملف باستخدام ramfs::lookup_file. إذا وجده، ينشئ له "مقبض" (Handle) باستخدام alloc_handle ويرد برقمه للتطبيق.
  • VFS_READ: يأخذ رقم المقبض (Handle)، يقرأ الذاكرة المخصصة لهذا المقبض، ويرسل المحتوى في جسم الرسالة (Payload).
  • VFS_STAT: يرجع حجم الملف وما إذا كان مجلداً أم لا.
  • VFS_LIST: يبحث في ramfs عن المجلد المطلوب ويرجع أسماء الملفات داخله.

كل رد (Reply) يتم توجيهه إلى منفذ المرسل الأصلي (sender_port).

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