Lecture port série sur LINUX
Fermé
ABouras
Messages postés
26
Date d'inscription
vendredi 16 novembre 2012
Statut
Membre
Dernière intervention
7 décembre 2012
-
Modifié par ABouras le 23/11/2012 à 10:59
ABouras Messages postés 26 Date d'inscription vendredi 16 novembre 2012 Statut Membre Dernière intervention 7 décembre 2012 - 23 nov. 2012 à 14:20
ABouras Messages postés 26 Date d'inscription vendredi 16 novembre 2012 Statut Membre Dernière intervention 7 décembre 2012 - 23 nov. 2012 à 14:20
A voir également:
- Lecture port série sur LINUX
- Lecture epub sur pc - Guide
- Confirmation de lecture whatsapp - Guide
- Nettoyer port usb c - Accueil - Téléphones
- Accusé de lecture gmail - Guide
- Port ping - Forum Réseau
6 réponses
totof31
Messages postés
163
Date d'inscription
lundi 29 octobre 2012
Statut
Membre
Dernière intervention
30 avril 2013
74
23 nov. 2012 à 10:54
23 nov. 2012 à 10:54
Tu n'as toujours pas compris que read peut retourner 0 si le buffer est vide ?!?!?! Il ne faut pas traiter ce cas comme une erreur : ton programme vide simplement le buffer plus vite qu'il ne se remplit !
ABouras
Messages postés
26
Date d'inscription
vendredi 16 novembre 2012
Statut
Membre
Dernière intervention
7 décembre 2012
23 nov. 2012 à 11:20
23 nov. 2012 à 11:20
Ok merci pour tes réponses !
Par contre
while (buf[0] != "\n")
me sors une erreur, j'ai mis à la place :
while (buf[0] != '\n')
j'ai aussi modifier la condition sur le read :
if (read(file, &buf, sizeof(buf)) != -1)
Mais ça ne corrige pas le problème ...
Par contre
while (buf[0] != "\n")
me sors une erreur, j'ai mis à la place :
while (buf[0] != '\n')
j'ai aussi modifier la condition sur le read :
if (read(file, &buf, sizeof(buf)) != -1)
Mais ça ne corrige pas le problème ...
totof31
Messages postés
163
Date d'inscription
lundi 29 octobre 2012
Statut
Membre
Dernière intervention
30 avril 2013
74
23 nov. 2012 à 11:44
23 nov. 2012 à 11:44
On recommence :
nb_car=read(file, &buf, sizeof(buf);
if (nb_car > 0)
// une donnée est présente, on ajoute à message
else if (nb_car == 0)
// buffer vide, on ne fait rien, on boucle en attendant qu'il se remplisse
else
// erreur (gravité à voir selon la valeur de nb_car/errno...) ==> il ne faut pas nécessairement terminer le programme !
nb_car=read(file, &buf, sizeof(buf);
if (nb_car > 0)
// une donnée est présente, on ajoute à message
else if (nb_car == 0)
// buffer vide, on ne fait rien, on boucle en attendant qu'il se remplisse
else
// erreur (gravité à voir selon la valeur de nb_car/errno...) ==> il ne faut pas nécessairement terminer le programme !
ABouras
Messages postés
26
Date d'inscription
vendredi 16 novembre 2012
Statut
Membre
Dernière intervention
7 décembre 2012
23 nov. 2012 à 13:03
23 nov. 2012 à 13:03
Bonjour, merci de répondre !
Voilà mon code mis à jour :
Mais j'ai toujours le même problème, je n'arrive pas à obtenir la ligne entière, il s'arrête avant ... Ce que je veux, c'est voir sur le prompteur, une ligne entière s'afficher à chaque execution de la fonction readMessage ...
Voilà mon code mis à jour :
bool readMessage(int file, char* message, int nbCharToRead) { int i,car; char buf[2] = {0}; message = (char*)malloc(sizeof(*message)*(nbCharToRead+1)); if (file != -1) { i = 0; while(buf[0] != '\n') { car = read(file, &buf, sizeof(buf)); if (car > 0) { message[i] = buf[0]; i++; } else if (car == 0); //on continue la boucle ... else {printf("Reception error !\n\n"); return false; free(message);} } printf("Retour à la ligne ...\n"); message[i] = '\0'; printf("message : %s", message); return true; } else {printf("Error while reading file !\n"); return false;} };
Mais j'ai toujours le même problème, je n'arrive pas à obtenir la ligne entière, il s'arrête avant ... Ce que je veux, c'est voir sur le prompteur, une ligne entière s'afficher à chaque execution de la fonction readMessage ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
totof31
Messages postés
163
Date d'inscription
lundi 29 octobre 2012
Statut
Membre
Dernière intervention
30 avril 2013
74
23 nov. 2012 à 14:00
23 nov. 2012 à 14:00
erreur (gravité à voir selon la valeur de nb_car/errno...) ==> il ne faut pas nécessairement terminer le programme !
Essaie d'enlever le else et sa suite !!!
Essaie d'enlever le else et sa suite !!!
totof31
Messages postés
163
Date d'inscription
lundi 29 octobre 2012
Statut
Membre
Dernière intervention
30 avril 2013
74
23 nov. 2012 à 14:19
23 nov. 2012 à 14:19
Et renforce aussi ton test pour ne pas déborder :
while(buf[0] != '\n')
==> while ((buf[0] != '\n') && (i < nbCharToRead))
while(buf[0] != '\n')
==> while ((buf[0] != '\n') && (i < nbCharToRead))
ABouras
Messages postés
26
Date d'inscription
vendredi 16 novembre 2012
Statut
Membre
Dernière intervention
7 décembre 2012
23 nov. 2012 à 14:20
23 nov. 2012 à 14:20
ça y est ça marche, j'ai enlever le else (erreur) !
Donc là j'affiche un bout d'une ligne jusqu'au retour à la ligne, mais j'aimerais maintenant afficher une ligne entière. Pour cela, mon algo est le suivant :
1) trouver un saut de ligne
2) afficher et enregistrer dans message[] les caractères qui suivent ce retour à la ligne jusqu'au prochain saut de ligne.
et ainsi de suite (je ferai ensuite une boucle dans le main pour afficher ligne par ligne le message). Ma fonction readMessage doit juste afficher et enregistrer une seule ligne complète.
Donc là j'affiche un bout d'une ligne jusqu'au retour à la ligne, mais j'aimerais maintenant afficher une ligne entière. Pour cela, mon algo est le suivant :
1) trouver un saut de ligne
2) afficher et enregistrer dans message[] les caractères qui suivent ce retour à la ligne jusqu'au prochain saut de ligne.
et ainsi de suite (je ferai ensuite une boucle dans le main pour afficher ligne par ligne le message). Ma fonction readMessage doit juste afficher et enregistrer une seule ligne complète.
23 nov. 2012 à 11:07
while(buf != "\n")
mais
while(buf[0] != "\n")