Linux 安装iPod时发生多个安装事件

Linux 安装iPod时发生多个安装事件,linux,ipod,gio,Linux,Ipod,Gio,我正在开发一个应用程序,它必须检测存储卷是否已装载或卸载。我用的是GIO。我正在侦听添加的装载和删除的装载信号。当我安装/卸载笔驱动器时,一切正常。然而,我发现在安装iPod时出现了一个问题。我在装载和卸载时收到两次回调。我假设其中一个GMount对象是,但对这两个对象都返回false。我如何决定处理哪一个和忽略哪一个?我不能同时处理这两个问题。我必须检测与存储设备对应的装载/卸载,并仅处理该装载/卸载 int main() { g_type_init(); GVolumeMon

我正在开发一个应用程序,它必须检测存储卷是否已装载或卸载。我用的是GIO。我正在侦听添加的
装载
和删除的
装载
信号。当我安装/卸载笔驱动器时,一切正常。然而,我发现在安装iPod时出现了一个问题。我在装载和卸载时收到两次回调。我假设其中一个
GMount
对象是,但对这两个对象都返回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);
    ...
}

我已经弄明白了
GIO
为添加的每个文件系统发出一个
mount added
信号。iPod有两个文件系统——一个用于操作系统,另一个用于存储音乐。因此,重复回调。卸载时也会发生同样的情况。这与暗影坐骑无关。不幸的是,我仍然不知道如何区分这两个坐骑。
GIO
显示的唯一区别是其中一个
GMount
对象没有与其关联的
GVolume
对象。我不知道该怎么解释。

你试过
增加的卷
删除的卷
了吗?我试过了。我看到我只收到一次回叫。但我不确定我的所有使用案例(我希望能够检测到所有存储设备的添加/删除)是否都会出现这种情况,我希望继续使用
mount xxx
信号,以避免大量的测试案例。所有存储设备都是Linux上的卷,伊斯梅尔:听起来至少有一个操作系统不是这样的。会是哪一种,为什么会是这样?@user562374我们在这里谈论的是Linux。