我正在开发一个应用程序,该应用程序必须检测存储卷是否已安装或卸载。我使用GIO来实现这一点。我在监听mount-added和mount-removed信号。挂载/卸载笔式驱动器时,一切正常。但是,我在挂载iPod时发现了一个问题。我得到了两个回调,每个都是在mount和unmount上的。我假设其中一个GMount对象应该是shadowed,但是g_mount_is_shadowed对这两个对象都返回了false。我如何决定处理和忽略哪一个?我无法同时处理这两个问题。我必须检测对应于存储设备的挂载/卸载,并仅处理该挂载/卸载。
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);
...
}发布于 2011-01-06 19:35:48
我已经弄明白了。对于添加的每个文件系统,GIO都会发出一个mount-added信号。iPod有两个文件系统-一个用于操作系统,另一个用于存储音乐。因此出现了重复的回调。卸载时也会发生同样的情况。这与阴影坐骑没有任何关系。不幸的是,我仍然不知道如何区分这两个坐骑。GIO显示的唯一区别是其中一个GMount对象没有与之关联的GVolume对象。我不知道该怎么解释。
https://stackoverflow.com/questions/4605106
复制相似问题