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

C Discussion :

lecture de fichier périphérique sous Linux


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut lecture de fichier périphérique sous Linux
    bonjour à tous

    mon problème est le suivant : je suis sous Linux, et j'ai un problème de gestion des fichiers périphériques (comme l'indiquait le titre du poste ^^" )

    j'aimerais récupérer les entrées clavier de l'utilisateur, et donc lire le fichier /dev/input/eventX (chez moi event4 ). J'ai commencé par écrire ce code tout simple :

    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
    25
    26
    27
    28
    29
     
    #include <stdio.h>
    #include <stdlib.h>
     
    main()
    {
    	FILE* fichier = NULL;
    	int caractereActuel =0;
     
     
    	fichier = fopen("/dev/input/event4", "r");
     
    	if (fichier != NULL);
    	{
     
     
    		do
    		{
    		        caractereActuel = fgetc(fichier);
                            printf("%c", caractereActuel);
     
    		}
                    while(1);
     
    	}
     
     
    return 0;
    }
    (je suis obligé de l'exécuter en root)

    mais j'ai alors des symboles totalement incompréhensibles pour moi qui s'affichent. Quelqu'un aurait une idée pour obtenir des lettres humainement lisible? ou est-ce que ma méthode n'est carrément pas la bonne?

    merci d'avance de vos réponses

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 628
    Points
    23 628
    Par défaut
    Bonjour !

    mais j'ai alors des symboles totalement incompréhensibles pour moi qui s'affichent. Quelqu'un aurait une idée pour obtenir des lettres humainement lisible? ou est-ce que ma méthode n'est carrément pas la bonne?
    La méthode n'est carrément pas la bonne. :-)

    « /dev/input » recense tous les « périphériques de saisie », c'est-à-dire, en réalité, tous les engins comme claviers, souris, joysticks, tablettes graphiques, mais pouvant respecter un certain protocole. Ça veut dire que ça va principalement concerner tout ce qui se branche en USB, mais la console clavier/souris branchée en PS/2, par exemple, ne va pas du tout être gérée de la même façon, ni au même niveau.

    En outre, ce que tu lis, ce sont des événements correspondant au dit protocole, donc ce sont des données binaires que tu reçois. Il est normal qu'elles ne correspondent à rien si tu les imprimes telles quelles.

    Enfin, même si tu lisais directement le port PS/2 par exemple (ce qui a tendance à mettre la pagaille), ce serait non pas les lettres frappées que tu recevrais, mais les scan codes des touches, c'est-à-dire le numéro d'emplacement de ces touches sur le clavier, et ceux parce que d'une part tu peux saisir plusieurs caractères différents avec la même touche (avec Shift, Ctrl, etc) et que d'autre part, le clavier d'un PC peut avoir différents agencements : AZERTY, QWERTY, QWERTZ, etc.

    Pour faire ce que tu veux faire, il faut savoir à quel niveau tu veux travailler : une même machine peut ajourd'hui avoir plusieurs claviers, sur le port USB. Ceci seront par défaut considérés comme un seul et même clavier par le système, mais il en reste que les sources seront différentes. Ensuite, Unix et Linux sont des systèmes centralisés multi-utilisateurs : plusieurs personnes peuvent travailler simultanément sur la même machine, via une connexion réseau. À ce moment-là, quelles touches souhaites-tu enregistrer ?

    Enfin, il faut considérer deux choses : d'une part, le noyau Linux lui-même qui gère naturellement la console au plus bas niveau (sauf si explicitement désactivé à la compilation du noyau) et qui te propose ensuite les fameuses consoles virtuelles.

    D'autre part, il y a X-Window, qui se lance dans une de ses consoles virtuelles et qui, de là, va gérer tout l'environnement graphique. Et à ce titre, il va faire une gestion bas niveau des différents périphériques également. Donc, en fonction de l'environnement dans lequel tu évolues, tu vas choisir de faire soit de la programmation système Linux, soit de la programmation X-Window en particulier.

    Dans ce dernier cas — qui est en l'occurrence celui qui t'intéresse le plus probablement — les informations reçues par les différents périphériques d'entrées gérés par le serveur X sont diffusés dans le contexte de l'environnement graphique entier, et propagés sous formes d'événements, au même titre qu'un clic de souris ou que le mouvement d'une fenêtre.

    Ce que tu cherches donc à faire, dans un premier temps, est d'ouvrir une connexion vers le serveur X, récupérer le handle de la fenêtre racine et écouter les événements qu'elle reçoit. Il faudra peut-être ajuster certains droits sur certaines fenêtres pour être sûr de tous les recevoir.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    effectivement je ne cherchais pas du tout au bonne endroit ...

    merci de ta réponse Obsidian, je vais voir ce que je trouve sur le serveur X et la gestion des événement avec xlib

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 373
    Points : 23 628
    Points
    23 628
    Par défaut
    Citation Envoyé par yho67 Voir le message
    merci de ta réponse Obsidian, je vais voir ce que je trouve sur le serveur X et la gestion des événement avec xlib
    C'est la bonne voie ! :-)

    Encore un détail : aujourd'hui, GNOME et d'autres frameworks utilisent aujourd'hui iBus pour gérer les saisies clavier. Je ne sais pas exactement jusqu'à quel niveau descend cette infrastructure en elle-même mais, à l'autre extrémité, elle est très utilisée pour faire une gestion intelligente du clavier, rajouter des touches mortes (utiles pour obtenir facilement « ¹²³⁴⁵⁶⁷⁸⁹ ») et changer d'agencement en fonction des applications.

    Tu pourras toujours recevoir les événements X mais il faudra t'intéresser également au type d'information que tu cherches à recevoir.

Discussions similaires

  1. [Excel] Lecture d'un fichier excel sous linux par php
    Par marcandre dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 13/07/2008, 16h45
  2. Lire un fichier .ini sous Linux
    Par cheprod dans le forum Linux
    Réponses: 2
    Dernier message: 26/04/2006, 17h34
  3. Lire des fichiers iso sous linux
    Par wodel dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 28/11/2005, 10h17
  4. Fichier effacés sous linux ....
    Par vbcasimir dans le forum Administration système
    Réponses: 4
    Dernier message: 09/12/2004, 09h28
  5. Réponses: 5
    Dernier message: 06/03/2003, 13h27

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