سؤال

أنا أعمل على تطبيق يجب أن يكتشف ما إذا كان حجم التخزين مثبتًا أو غير مثبت. انا استخدم GIO من أجل هذا. أستمع ل mount-added و mount-removed إشارات. كل شيء يعمل بشكل جيد عندما أقوم بتركيب/إلغاء محرك القلم. ومع ذلك ، أرى مشكلة عند تصاعد iPod. أحصل على عاتق عاتق كل منهما على جبل و unmount. افترضت واحدة من GMount ستكون الأشياء مظللة لكن g_mount_is_shadowed يعود خطأ لكليهما. كيف يمكنني أن أقرر أي واحد يجب معالجته وأي شيء يجب تجاهله؟ لا أستطيع معالجة كليهما. لا بد لي من اكتشاف الجبل/غير المقابل لجهاز التخزين ومعالجة ذلك فقط.

int main()
{
    g_type_init();
    GVolumeMonitor* volume_monitor = g_volume_monitor_get();
    g_signal_connect(G_OBJECT(volume_monitor), "mount-added", G_CALLBACK(mount_added), NULL);
    g_signal_connect(G_OBJECT(volume_monitor), "mount-removed", G_CALLBACK(mount_removed), NULL);

    GMainLoop* main_loop = g_main_loop_new(NULL, FALSE);        
    g_main_loop_run(main_loop);
    ...
}
هل كانت مفيدة؟

المحلول

لقد حظيت بها. GIO تنبعث أ mount-added إشارة لكل نظام ملفات يتم إضافتها. يحتوي iPod على نظامين للملفات - واحد لنظام التشغيل وواحد لتخزين الموسيقى. وبالتالي رد الاتصال المتكرر. الشيء نفسه يحدث على unmount. هذا لا علاقة له مع حوامل مظللة. لسوء الحظ ، ما زلت لا أعرف كيفية التمييز بين الاثنين. والفرق الوحيد GIOيظهر أن واحدة من GMount الكائنات لا تحتوي على ملف GVolume كائن مرتبط به. لا أعرف كيف أفسر ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top