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 :
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 :
1 2
| fflush(stdout);
fflush(stdin); |
Mais ca ne vide rien !
J'ai essayé ca aussi :
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 ?
Partager