Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Bibliothèques, systèmes et outils
Bibliothèques, systèmes et outils Forum d'entraide sur les bibliothèques, la programmation système et les outils en C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/06/2012, 15h56   #1
cauriera
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 73
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 73
Points : 10
Points : 10
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
cauriera est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2012, 13h54   #2
Trademark
Membre émérite
 
Avatar de Trademark
 
Inscription : février 2009
Messages : 568
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 568
Points : 818
Points : 818
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
Trademark est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/06/2012, 09h37   #3
cauriera
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 73
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 73
Points : 10
Points : 10
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.
cauriera est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h54.


 
 
 
 
Partenaires

Hébergement Web