Pregunta

Estoy trabajando en una aplicación que tiene que detectar si un volumen de almacenamiento está montado o desmontado. Estoy usando GIO para eso. Me escucha de las señales mount-added y mount-removed. Todo funciona bien cuando montar / desmontar un pen drive. Sin embargo, estoy viendo un problema al montar un iPod. Me estoy haciendo dos devoluciones de llamada de cada uno de montar y desmontar. Supuse uno de los objetos GMount serían sombreada g_mount_is_shadowed está volviendo falsa para ambos. ¿Cómo decidir cuál de ellos para el proceso y cuáles ignorar? No puedo procesar ambos. Tengo para detectar la montar / desmontar correspondiente al dispositivo de almacenamiento y proceso sólo eso.

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);
    ...
}
¿Fue útil?

Solución

he dado cuenta. GIO emite una señal mount-added para cada sistema de archivos que se añade. El iPod tiene dos sistemas de archivos - una para el sistema operativo y otro para almacenar música. Por lo tanto la repetida devolución de llamada. Lo mismo sucede en el desmontaje. Esto no tiene nada que ver con los montajes de sombra. Por desgracia, todavía no sé cómo distinguir entre las dos monturas. Los únicos GIOshows diferencia es que uno de los objetos GMount no tiene un objeto GVolume asociada a ella. No sé cómo interpretar eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top