IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

D-bus et le langage C [Non suivi]


Sujet :

Réseau C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut D-bus et le langage C
    Bonjour,

    Je viens vous demander quelques informations sur la programmation systeme.
    Je suis en stage et l'on me demande de creer une bibliotheque pour imiter D-bus sous linux le tout en C.

    Mon but est donc de creer toutes les fontions necessaires pour ensuite creer une imitation du "panneau de preferences" de mac.

    Il me serais egalement utile de pouvoir detecter le branchement d'une cle usb ou des acces disque.

    Le sujet n'est pas encore bien definit et il me faut le maximum d'information avant lundi car je doit me decider sur le sujet que je souhaite faire.

    Si vous pouvez me donner le maximum de reference aussi bien en ligne que manuscrite.

    Desole si je vous parrais peut precis mais je n'en sais pas beaucoup plus.

    La bibliotheque que je dois ecrire ne doit pas etre specifique a une architecture ni a une distribution linux.

    Merci pour vos renseignements.

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par cybersplash
    Je viens vous demander quelques informations sur la programmation systeme.
    Je suis en stage et l'on me demande de creer une bibliotheque pour imiter D-bus sous linux le tout en C.<...>
    Quelle est la question sur le langage C ?
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    La question il y en a pas vraiment j'ai juste besoin de documentation qui m'explique comment utiliser d-bus le tout en c

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par cybersplash
    La question il y en a pas vraiment j'ai juste besoin de documentation qui m'explique comment utiliser d-bus le tout en c
    Ca n'a aucun sens. Un protocole n'a rien à voir avec un langage.

    Essaye de comprendre comment fonctionne ce protocole, sur quelles ressources matérielles il s'appuie, et ensuite, on fonction de ta plateforme, on verra comment le mettre en oeuvre en C (éventuellement).
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    J'ai deja lu quelques articles expliquant le fonctionnement de dbus maintenant j'aimerai avoir des exemples concret de l'utilisation de dbus en c.

    Par exemple j'aimerai faire un petit programme qui m'indique la connexion d'un peripherique usb sur ma machine et pouvoir recuperer le maximum d'information dessus.

    Le principe de dbus n'est pas vraiment compliaue ce qui me pose probleme c'est de faire un premier programme (un hello world pour dbus )

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Je viens de trouver un site qui donne un exemple de code avec dbus mais impossible de compiler

    j'ai installe dbus sur ma session dans le dossier local.
    Premier probleme il ne me trouve pas le fichier dbus-arch-deps.h aui se trouve dans un autres dossier. Pour resoudre le probleme j'ai recopier le fichier dans le dossier include la ou se trouve le fichier dbus.h.

    une fois cela fait j'obtiens le .o sans probleme mais lors de la phase de link j'obtiens plein d'erreur.

    Voici la commande aue j'utilise pour compiler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -I$HOME/local/include/dbus-1.0/dbus -I$HOME/local/include/dbus-1.0 -L$HOME/local/lib/libdbus-1.so test.c
    et voici les erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    /tmp/ccxo9Xgh.o(.text+0x24): In function `main':
    : undefined reference to `dbus_error_init'
    /tmp/ccxo9Xgh.o(.text+0x35): In function `main':
    : undefined reference to `dbus_bus_get'
    /tmp/ccxo9Xgh.o(.text+0x47): In function `main':
    : undefined reference to `dbus_error_is_set'
    /tmp/ccxo9Xgh.o(.text+0x73): In function `main':
    : undefined reference to `dbus_error_free'
    /tmp/ccxo9Xgh.o(.text+0x99): In function `main':
    : undefined reference to `dbus_bus_request_name'
    /tmp/ccxo9Xgh.o(.text+0xab): In function `main':
    : undefined reference to `dbus_error_is_set'
    /tmp/ccxo9Xgh.o(.text+0xd7): In function `main':
    : undefined reference to `dbus_error_free'
    /tmp/ccxo9Xgh.o(.text+0x108): In function `main':
    : undefined reference to `dbus_message_new_signal'
    /tmp/ccxo9Xgh.o(.text+0x146): In function `main':
    : undefined reference to `dbus_connection_send'
    /tmp/ccxo9Xgh.o(.text+0x178): In function `main':
    : undefined reference to `dbus_connection_flush'
    /tmp/ccxo9Xgh.o(.text+0x186): In function `main':
    : undefined reference to `dbus_message_unref'
    collect2: ld returned 1 exit status
    j'ai essaye de rajouter un -L avec le chemin vers le fichier libdbus-1.so mais rien a faire ca passe pas

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par cybersplash
    Je viens de trouver un site qui donne un exemple de code avec dbus mais impossible de compiler

    j'ai installe dbus sur ma session dans le dossier local.
    Premier probleme il ne me trouve pas le fichier dbus-arch-deps.h aui se trouve dans un autres dossier. Pour resoudre le probleme j'ai recopier le fichier dans le dossier include la ou se trouve le fichier dbus.h.

    une fois cela fait j'obtiens le .o sans probleme mais lors de la phase de link j'obtiens plein d'erreur.

    Voici la commande aue j'utilise pour compiler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -I$HOME/local/include/dbus-1.0/dbus -I$HOME/local/include/dbus-1.0 -L$HOME/local/lib/libdbus-1.so test.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <...>
    /tmp/ccxo9Xgh.o(.text+0x186): In function `main':
    : undefined reference to `dbus_message_unref'
    collect2: ld returned 1 exit status
    j'ai essaye de rajouter un -L avec le chemin vers le fichier libdbus-1.so mais rien a faire ca passe pas
    Une bibliothèque est composé d'une interface (les fichiers .h) et d'un implémentation (le fichier.o, .a, .so etc.)

    Il faut donc que cette bibliothèque soit correctement installée sur ta machine pour fonctionner, que ton environnement sache où trouver les .h (-I) et les .a (-L), que le .a ait été lié à l'application et que les .so soient accessibles à l'exécution...

    Bref, il faut savoir ce qu'on fait...

    http://emmanuel-delahaye.developpez....htm#production
    http://emmanuel-delahaye.developpez....m#bibliotheque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -I$HOME/local/include/dbus-1.0/dbus -I$HOME/local/include/dbus-1.0 -L$HOME/local/lib/ -ldbus-1 test.c -o monappli
    Nota. Je suis un peu étonné par $HOME. Si c'est une particularité de Linux, je ne connais pas. Mais si on est dans un Makefile, c'est $(HOME). (En supposant que HOME est une variable globale de l'environnement courant).
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Je comprends bien ce que vous me dites mais je ne comprends pas la reponse.

    Pourquoi j'obtiens ces messages lors de la phase de link ?

    ma variable LD_LIBRARY_PATH est configure pour indiauer le chemin de dbus

    Desole de vous sembler un peu nerveux mais les reponses aussi peux sympathique m'enerve. Je suis desole de ne pas avoir votre niveau je suis encore etudiant donc j'apprend donc je pose des questions. Et quand on apprend et que l'on pose une question sur ce que l'on est en train d'apprend et qu'on nous repond d'apprendre ca ce mord un peu la queue.

    Donc il faut sortir de cette boucle le while(1) doit avoir un break mois j'espere avoir une reponse.

  9. #9
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par cybersplash
    Pourquoi j'obtiens ces messages lors de la phase de link ?
    A vue de nez, il manque un -l (petit elle).
    Si je veux utiliser la bibliotheque libtoto.[a/so] qui se trouve dans /my/path/lib et dont les fichiers d'interfaces sont situes dans /my/path/inc, avec gcc on fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -I/my/path/inc -c toto.c
    a la phase de compilation et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc toto.o -o toto -ltoto -L/my/path/lib
    lors de l'edition des liens.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Merci pour ta reponse ca marche enfin le nom de la librairie n'est pas dbus mais dbus-1

    Enfin maintenant ca marche

    Par contre nouveau soucis les droits de connexion au bus pose probleme

    je suis en train de faire une recherche pour arranger cela

    Sinon un point que je ne comprend pas tres bien se situe au niveau des noms d'interface de dbus. Ou puis-je trouver les noms d'interfaces des differents composants de ma machine ?

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par cybersplash
    Merci pour ta reponse ca marche enfin le nom de la librairie n'est pas dbus mais dbus-1
    Comme je l'avais indiqué ici : http://www.developpez.net/forums/sho...34&postcount=7

    si tu avais pris le temps de lire la réponse au lieu de déblatérer...
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    bon soit mais votre aide pourrait etre plus utile sans le roulage sous les aisselles (pour les fans du pere noel est une ordure )

    Sinon je viens de faire mes premier test et je comprend de mieux en mieux le fonctionnement de dbus avec hal.

    Mais il me reste un dernier probleme pour effectuer mes tests. Comment definir les droits de connexion.

    Donc voici mon code pour me connecter au bus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
      DBusError err;
      DBusConnection* conn;
      int ret;
      // allocation de la memoire pour les erreurs
      dbus_error_init(&err);
     
      // connexion sur un bus session
      conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
      if (dbus_error_is_set(&err)) { 
        fprintf(stderr, "Connexion Erreur (%s)\n", err.message); 
        dbus_error_free(&err); 
       }
      if (NULL == conn) { 
        exit(1); 
      }
    Lorsque j'execute j'obtiens mon message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Connexion Erreur (Failed to connect to socket /tmp/dbus-ATR7BJ0rHH: Connection refused)
    J'ai lu que les fichiers permettant de definir les droits d'acces se trouve dans /etc/dbus-1/system.d/

    Donc apres un petit passage dans ce dossier je trouve des fichiers xml me permettant de definir les droits suivants les interface.

    J'ai le meme dossier dans mon installation locale de dbus mais lui est vide.

    Ma question est : est-il possible de lancer deux daemon dbus sur une meme machine et comment definir lequel j'utilise dans mon code C ?

Discussions similaires

  1. [langage] Je cherche un bon livre ?
    Par Anonymous dans le forum Langage
    Réponses: 13
    Dernier message: 09/04/2003, 13h16
  2. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  3. [langage] comment créer des fichiers ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2002, 16h33
  4. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37
  5. Cours, tutoriels, logiciels, F.A.Q,... pour le langage SQL
    Par Marc Lussac dans le forum Langage SQL
    Réponses: 0
    Dernier message: 04/04/2002, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo