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

Bibliothèques, systèmes et outils C Discussion :

Utilisation fonction select() sur un descripteur


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Points : 41
    Points
    41
    Par défaut Utilisation fonction select() sur un descripteur
    Bonjour,

    Je souhaite faire communiquer deux système Linux sur un lien UART.
    J'utilise pour cela un descripteur et la fonction select().

    Voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int fdport;
    fd_set readfs;
     
    fdport = open("/dev/ttyS1", O_RDWR ,0);
     
    FD_ZERO(&readfs);
    FD_SET(fdport, &readfs);
     
    if( select(fdport + 1, &readfs, NULL, NULL, NULL) < 0)
     
    [...]
    Mon problème, c'est que mon code ne sort de la fonction select() que lorsque ttS1 recoit le caractère "retour à la ligne"

    J'ai fait le test en faisant un echo depuis le Linux distant, je sors bien du select(). Par contre en envoyant un buffer autre, le programme reste dans le select(), jusqu’à recevoir un retour à la ligne.

    Comment faire pour que le select() retourne quelque chose dès réception d'octets?
    Ou alors faut il que j'utilise d'autres fonctions?

    Merci de votre aide

  2. #2
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Salut,

    en fait il se peut que le problème soit ailleurs, c'est plutôt lors de l'envoi que j'ai un doute. Est-ce que tu es sur que lors de l'envoi, le buffer n'attend pas d'être vider par le caractère spécial \n.

    Parce que je ne vois aucune raison pour laquelle select attendrait

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Points : 41
    Points
    41
    Par défaut
    En fait, c'est bien sur la réception qu'il y a un problème. Le problème ne vient pas de la fonction, mais du mode de fonctionnement du device tty, qui fonctionne sur le mode "terminal line discipline" qui attends d'avoir une ligne correctement formée avant d'envoyer les données. Une solution serait de faire entrer le terminal en mode non canonique afin que les données soit directement transmises

    J'ai trouvé cette info ailleurs. En mettant le tty de réception en mode non canonique, et plus de problème!

    Mais merci de ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation fonction select.
    Par shirohige dans le forum C
    Réponses: 8
    Dernier message: 17/07/2013, 13h26
  2. utilisation fonction select
    Par azer355 dans le forum MATLAB
    Réponses: 2
    Dernier message: 13/02/2010, 21h14
  3. Utilisation fonction imshow sur une partie d'une matrice
    Par bertrand42300 dans le forum Images
    Réponses: 2
    Dernier message: 25/04/2009, 12h30
  4. Infos sur la fonction select en C
    Par oook dans le forum C
    Réponses: 8
    Dernier message: 07/12/2005, 16h15
  5. selection sur une table en fonction de plusieurs ligne
    Par dimdidi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2004, 09h42

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