Linux - notification d'insertion disque

Linux - notification d'insertion disque - C - Programmation

Marsh Posté le 24-09-2010 à 19:29:53    

Bonsoir :)
 
Je cherche à récupérer des événements système comme par exemple une notification d'insertion de disque (et éjection ) sous linux mais je n'ai rien trouvé à ce sujet.
 
Quelqu'un aurait-il une piste ?
 
Merci  :jap:

Reply

Marsh Posté le 24-09-2010 à 19:29:53   

Reply

Marsh Posté le 24-09-2010 à 20:37:57    

Regarde du côté de udev et hal


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 24-09-2010 à 20:53:00    

Salut :)
 
C'est ce que je suis en train de faire, et j'ai également vu inotify qui pourrait m'aider.
 
Par contre, je pense qu'il me faudra aussi faire de la configuration système pour avoir exactement le comportement que je souhaite, je vais donc poser aussi ma question dans la section OSA.
 
 
En gros, je souhaite appeler des callbacks à l'insertion d'un CD/DVD , et à l'éjection d'un CD/DVD sans forcément monter celui-ci.

Reply

Marsh Posté le 24-09-2010 à 23:20:53    

Reply

Marsh Posté le 25-09-2010 à 07:58:52    

Merci pour ce lien :)
 
Je vois que c'est une bibliothèque du projet gnome. Fonctionne-t-elle de façon indépendante ou bien suis-je obligé d'avoir le kit de développement gnome en entier, ainsi que l'ensemble des bibliothèques gnome sur la plateforme cible ?

Reply

Marsh Posté le 25-09-2010 à 10:58:34    

Non c'est un morceau de la Glib (~ la libc de GNOME) donc le nombre de dépendance devrait être assez réduit.


Message édité par Taz le 25-09-2010 à 10:59:43
Reply

Marsh Posté le 25-09-2010 à 11:19:09    

En particulier, tu dois utiliser GVolumeMonitor http://library.gnome.org/devel/gio [...] nitor.html et le signal "mount-added".

Reply

Marsh Posté le 25-09-2010 à 11:33:44    

Super merci :)
 
Je vais me faire une petite application pour tester si cela correspond bien à ce que je souhaite.

Reply

Marsh Posté le 22-12-2010 à 14:01:51    

Salut :)
 
Je remonte le message, car j'ai un peu de temps cette semaine pour tester cette bibliothèque.
 
Je viens de compiler une application minimale afin de me familiariser avec cette bibliothèque ( en particulier la section GVolumeMonitor).
 
Je rencontre quelques petits soucis, probablement du à mon système (mandriva 2010 , pas taper ).
 
Lorsque je lance mon application, j'ai un message DBus : cannot connect to the session bus : org.freedesktop.DBus.Error. NoReplu : Did not receive a reply. Possible cause include : the remote application did not send a reply, the message security policy blocked the reply, the reply timeout expired, or the network connection was broken.
 
Mon appel se resume à :  
 

Code :
  1. int main()
  2. {
  3. g_type_init();
  4. GVolumeMonitor * monitor;
  5. monitor = g_volume_monitor_get();
  6. GList * list = g_volume_monitor_get_volumes( monitor );
  7. while ( list )
  8. {
  9. ...
  10. }
  11. g_list_free( list );
  12. g_object_unref( monitor );
  13. return 0;
  14. }


 
Apparemment, je n'arrive pas à lister les volumes avec la fonction g_volume_monitor_get_volumes, ni les drives connectés avec g_volume_monitor_get_connected_drives.
 
Dans le 1er cas, il me retourne une liste de 2 éléments ayant pour nom 172.16.3.1 et 172.16.3.2 ( pour info, il s'agit de vieux montages NFS que j'ai effectué il y a longtemps, mais la machine a été rebooté plusieurs fois depuis ).
 
Dans le 2eme cas, la liste est vide.
 
J'ai probablement oublié des inits, ou bien, dbus ne fonctionne pas bien sur mon OS ( pourtant il est utilisé par le bureau pour détecter les médias insérés ).
 
Par ailleurs, j'ai également tenter de lister mon lecteur CDROM, sans disque, avec disque, et avec disque monté, pareil, il n'apparait pas dans la liste.
 
 
Pour finir, les signaux correspondraient exactement à ce que je veux, mais par quel mécanisme je peux enregistrer les handlers pour les récupérer ?
 
Merci :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed