Domanda

Sto lavorando su un app che deve rilevare se un volume di archiviazione è montato o smontato. Sto usando GIO per questo. Io ascolto per i segnali mount-added e mount-removed. Tutto funziona bene quando ho montare / smontare una pen drive. Tuttavia, sto vedendo un problema quando si monta un iPod. Io sono sempre due le richiamate ciascuno su montare e smontare. Ho assunto uno degli oggetti GMount sarebbero ombra g_mount_is_shadowed sta tornando false per entrambi. Come faccio a decidere quali uno per processo e quali ignorare? Non posso processare entrambi. Devo rilevare la smontaggio montare / corrispondente al dispositivo di stoccaggio e di processo solo.

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);
    ...
}
È stato utile?

Soluzione

ho capito. GIO emette un segnale mount-added per ciascun file system che viene aggiunto. L'iPod è dotato di due sistemi di file - una per il sistema operativo e uno per immagazzinare musica. Quindi il callback ripetuta. Lo stesso accade in smontaggio. Questo non ha nulla a che fare con i supporti in ombra. Purtroppo, io ancora non so come distinguere tra i due monti. Gli unici GIOshows differenza è che uno degli oggetti GMount non ha un oggetto GVolume associato. Non so come interpretare questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top