Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    janvier 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 74
    Points : 11
    Points
    11

    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 :
    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 Expert Avatar de Trademark
    Inscrit en
    février 2009
    Messages
    763
    Détails du profil
    Informations forums :
    Inscription : février 2009
    Messages : 763
    Points : 1 351
    Points
    1 351

    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
    Candidat au titre de Membre du Club
    Inscrit en
    janvier 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : janvier 2006
    Messages : 74
    Points : 11
    Points
    11

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •