【问题标题】:Multiple mount events on mounting iPod挂载 iPod 时的多个挂载事件
【发布时间】:2011-01-05 14:24:09
【问题描述】:

我正在开发一个必须检测存储卷是否已安装或卸载的应用程序。我为此使用GIO。我正在监听mount-addedmount-removed 信号。当我安装/卸载笔式驱动器时,一切正常。但是,我在安装 iPod 时遇到了问题。我在挂载和卸载时分别收到两个回调。我假设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);
    ...
}

【问题讨论】:

  • 你试过volume-addedvolume-removed吗?
  • 我做到了。我看到我只收到 1 个回调。但我不确定我的所有用例(我希望能够检测到所有 storage 设备的添加/删除)并且我想坚持使用mount-xxx 信号,如果只是为了避免大量测试用例。
  • 所有存储设备都是Linux上的卷,你真的尝试过吗?
  • Ismail:听起来至少有一个操作系统并非如此。那会是什么,为什么会这样?
  • @user562374 我们在这里讨论的是 Linux。

标签: linux ipod gio


【解决方案1】:

我想通了。 GIO 为每个添加的文件系统发出 mount-added 信号。 iPod 有两个文件系统——一个用于操作系统,一个用于存储音乐。因此重复回调。卸载时也会发生同样的情况。这与阴影坐骑无关。不幸的是,我仍然不知道如何区分这两个坐骑。 GIOshows 的唯一区别是 GMount 对象之一没有与之关联的 GVolume 对象。我不知道如何解释。

【讨论】:

    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 2016-05-22
    相关资源
    最近更新 更多