Vider le buffer après un sleep ?
Bonjour à tous !
Voilà je cherche en vain a vider mon buffer dans une boucle while qui lit le contenu de mon port série. Sur le port série est branché un lecteur de carte.
Voici mon code d'origine :
Code:
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
| while(1){
/* Attente et lecture carte */
printf("Attente lecture carte !\n");
read(fd, recup_port, 13);
/* Recuperation du numéro de carte */
strcpy (carte_num, "");
strncat (carte_num, &recup_port[7], 3);
argv[2]=carte_num;
/* Envoie des données */
for(i=0;i<argc;i++) {
rc = send(sd, argv[i], strlen(argv[i]) + 1, 0);
if(rc<0) {
perror("Ne peut pas recevoir les données ");
close(sd);
exit(1);
}
printf("Envoie au serveur: %s\n", argv[i]);
}
/* tempo evite d'endormir le programme de lecture sur la même carte */
sleep(3);
/* vider le buffer */
//while ((c=getchar()) !='\n' && c !=EOF);
//fflush(stdout);
//fflush(stdin);
} |
Comme vous pouvez le voir j'ai mis un sleep de 3 seconde, afin que le programme ne s'endorme pas sur la lecture de la même carte, afin d'éviter les doublons quand les personne laisse trop longtemps leur carte dans le lecteur. (Normalement ca doit être instantannée).
Le problème est que pendant ce sleep le buffer continu à enmagasiner les données de la carte lue. J'esaye donc de vider le buffer après le sleep. mais je n'y arrive pas.
J'ai mis :
Code:
1 2
| fflush(stdout);
fflush(stdin); |
Mais ca ne vide rien !
J'ai essayé ca aussi :
Code:
while ((c=getchar()) !='\n' && c !=EOF);
Mais ca boucle indéfiniment sur cette boucle.
Voilà, vous avez une idée ?
Je positionne peut être mal le code, ou bien je n'utilise pas le bon code ?
Re: Vider le buffer après un sleep ?
Je ne suis pas fort dans l'utilisation des ports séries mais lorsque je vois:
Citation:
Envoyé par olivier857
Voilà je cherche en vain a vider mon buffer dans une boucle while qui lit le contenu de mon port série.
puis:
Code:
1 2
| fflush(stdout);
fflush(stdin); |
Je me dis:
- Faire un flush de stdin n'a aucun sens et peut être cause d'ennuis! A ne pas utiliser!
- En quoi stdin/stdout ont un rapport avec le port série?
Donc pour ceci:
Code:
while ((c=getchar()) !='\n' && c !=EOF);
Est-ce que tu crois vraiment que getchar va lire ce qui se trouve sur le port série?
Jc
Re: Vider le buffer après un sleep ?
Citation:
Envoyé par fearyourself
Je ne suis pas fort dans l'utilisation des ports séries mais lorsque je vois:
Citation:
Envoyé par olivier857
Voilà je cherche en vain a vider mon buffer dans une boucle while qui lit le contenu de mon port série.
puis:
Code:
1 2
| fflush(stdout);
fflush(stdin); |
Je me dis:
- Faire un flush de stdin n'a aucun sens et peut être cause d'ennuis! A ne pas utiliser!
- En quoi stdin/stdout ont un rapport avec le port série?
Oui oui je sais très bien, les 2 non rien avoir, j'ai essayé en désespoire de cause. De plus je crois que le fflush() ne marche que pour les flux sortant et non entrants, fflush(stdin) ne doit pas marché.
C'est pour ca que j'ai voulu tester çà:
Code:
while ((c=getchar()) !='\n' && c !=EOF);
Citation:
Envoyé par fearyourself
Donc pour ceci:
Code:
while ((c=getchar()) !='\n' && c !=EOF);
Est-ce que tu crois vraiment que getchar va lire ce qui se trouve sur le port série?
Bein justement je ne sais pas, c'est la 1ère fois que j'emploi le port série en C. Je ne sais donc pas comment vider le buffer.
Si tu a une idée n'hésite pas ..., je suis preneur.