2011-01-05 3 views
0

私は、ストレージボリュームがマウントまたはマウント解除されているかどうかを検出する必要のあるアプリを開発中です。私はGIOを使っています。私はmount-addedmount-removed信号を聞いています。ペンドライブをマウント/アンマウントすると、すべてうまく動作します。しかし、iPodを取り付ける際に問題が発生しています。私はマウントとアンマウントのそれぞれに2つのコールバックを取得しています。私はGMountオブジェクトの1つがshadowedであると仮定しましたが、g_mount_is_shadowedは両方に対してfalseを返しています。処理するものと無視するものをどのように決定するのですか?私は両方を処理することはできません。私は、ストレージデバイスに対応するマウント/アンマウントを検出し、それだけを処理する必要があります。iPodをマウントする際の複数のマウントイベント

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); 
    ... 
} 
+0

'volume-added'と' volume-removed'を試しましたか? – ismail

+0

しました。そして私は1つのコールバックしか得られないことを知りました。しかし私はすべての私の使用例(私はすべての*ストレージ*デバイスの追加/削除を検出できるようにしたい)と私は確信していません、そして、私は広範なテストを避けるために 'mount-xxx'シグナルケース。 – 341008

+0

すべてのストレージデバイスはLinux上のボリュームですが、実際に試しましたか? – ismail

答えて

0

私はそれを理解しました。 GIOは、追加されるファイルシステムごとにmount-addedシグナルを発信します。 iPodには、OS用と音楽用の2つのファイルシステムがあります。したがって、繰り返されるコールバック。アンマウント時にも同じことが起こります。これはシャドウマウントとは関係ありません。残念ながら、私はまだ2つのマウントを区別する方法を知らない。 GIOの唯一の違いは、GMountオブジェクトの1つに、GVolumeオブジェクトが関連付けられていないことです。私はそれをどのように解釈するのか分からない。

関連する問題