Frage

Ich arbeite an einer Anwendung, die, wenn ein Speichervolumen montiert zu erfassen hat oder ausgehängt. Ich verwende GIO dafür. Ich lauschte den mount-added und mount-removed Signale. Alles funktioniert gut, wenn ich mount / aushängen einen USB-Stick. Aber ich sehe ein Problem, wenn ein iPod-Halterung. Ich erhalte zwei Rückrufe jeweils auf dem Berg und Aushängen. Ich nahm an einer der GMount Objekte wäre beschatteten aber g_mount_is_shadowed zurückkehrt für beide falsch. Wie kann ich entscheiden, was man zu Prozess und welche ignoriert werden? Ich kann beides nicht verarbeiten. Ich muss erkennen, die mount / unmount mit der Speichereinrichtung und Verfahren entsprechend nur das.

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);
    ...
}
War es hilfreich?

Lösung

Ich habe es herausgefunden. GIO emittiert ein mount-added Signal für jedes Dateisystem, das hinzugefügt wird. Der iPod hat zwei Dateisysteme - eine für das OS und eine für die Speicherung von Musik. Daraus ergibt sich die wiederholte Rückruf. Das gleiche geschieht auf Aushängen. Das hat nichts mit beschattetem Mounts zu tun. Leider habe ich immer noch nicht wissen, wie zwischen den beiden Halterungen zu unterscheiden. Der einzige Unterschied GIOshows ist, dass einer der GMount Objekte keine GVolume bezwecken damit verbunden. Ich weiß nicht, wie das interpretieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top