Pergunta

Estou trabalhando em um aplicativo que deve detectar se um volume de armazenamento é montado ou desmontado. estou usando GIO por isso. Eu ouvindo para o mount-added e mount-removed sinais. Tudo funciona bem quando eu monto/desmontando uma unidade de caneta. No entanto, estou vendo um problema ao montar um iPod. Estou recebendo dois retornos de chamada cada um no Monte e na desmontagem. Eu assumi um dos GMount objetos seriam sombreado mas g_mount_is_shadowed está retornando falso para ambos. Como decido qual processar e quais ignorar? Eu não posso processar ambos. Eu tenho que detectar a montagem/desmontar correspondente ao dispositivo de armazenamento e processar apenas isso.

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

Solução

Eu descobri. GIO emite a mount-added sinal para cada sistema de arquivos que é adicionado. O iPod possui dois sistemas de arquivos - um para o sistema operacional e outro para armazenar músicas. Daí o retorno de chamada repetido. O mesmo acontece na desmontagem. Isso não tem nada a ver com montagens sombrias. Infelizmente, ainda não sei como distinguir entre as duas montagens. A única diferença GIOshows é que um dos GMount Objetos não têm um GVolume objeto associado a ele. Eu não sei como interpretar isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top