Fonction screen /dev/ttyUSB0 en C 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 19/11/2012 à 15:27
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 21 nov. 2012 à 19:39
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 21 nov. 2012 à 19:39
A voir également:
- Fonction screen /dev/ttyUSB0 en C sur LINUX
- Telecharger dev c++ - Télécharger - Langages
- Fonction si et - Guide
- Massgrave dev - Accueil - Windows
- Blue screen windows 10 - Guide
- Dev home. - Télécharger - Développement
5 réponses
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 811
19 nov. 2012 à 15:22
19 nov. 2012 à 15:22
À ce stade tu arrives à ouvrir ton fichier avec succès ? Est ce qu'avec fscanf ou read tu parviens à lire le flux ?
Ensuite la question, c'est est ce que tu connais la structure du flux de données (par exemple qu'est ce qu'on trouve dans le bloc "chars") ? Si oui peux-tu nous donner un lien vers les spécifications et nous dire plus précisément ce qui te bloque ?
Bonne chance
Ensuite la question, c'est est ce que tu connais la structure du flux de données (par exemple qu'est ce qu'on trouve dans le bloc "chars") ? Si oui peux-tu nous donner un lien vers les spécifications et nous dire plus précisément ce qui te bloque ?
Bonne chance
ABouras
Messages postés
26
Date d'inscription
vendredi 16 novembre 2012
Statut
Membre
Dernière intervention
7 décembre 2012
19 nov. 2012 à 15:58
19 nov. 2012 à 15:58
Bonjour et merci de répondre.
J'arrive bien à ouvrir le fichier, mais je ne sais pas comment m'y prendre avec la fonction read.
J'ai essayé ça :
mais ça donne pas ce que je veux, d'autant plus, que j'ai mis 60 mais en vérité je ne sais pas quoi mettre, je sais pas si il faut faire une boucle ... bref, je ne sais pas utiliser la fonction read dans mon cas !
J'arrive bien à ouvrir le fichier, mais je ne sais pas comment m'y prendre avec la fonction read.
J'ai essayé ça :
int i; int ret = 0; while (1) { for (i=0; i<sizeMax; i++) { ret = read(file, &data[i], 60); printf("%c\n", data[i]); } }
mais ça donne pas ce que je veux, d'autant plus, que j'ai mis 60 mais en vérité je ne sais pas quoi mettre, je sais pas si il faut faire une boucle ... bref, je ne sais pas utiliser la fonction read dans mon cas !
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 811
Modifié par mamiemando le 19/11/2012 à 22:52
Modifié par mamiemando le 19/11/2012 à 22:52
Oui c'est ce qu'il faut faire (en gros). Mais maintenant il faut que tu saches ce qui est dans ce flux pour savoir quoi en faire. A priori c'est une structure de donnée "normalisée", il faut regarder les spécifications du protocole Xbee.
Supposons que tu saches que dans le flux, tu vas tomber sur une structure de type toto_t. Cette structure sera définie dans les spécifications de ton protocole, donc soit tu réécris la structure à la main à partir de spécifications de Xbee, soit tu connais une librairie qui définit cette structure dans un header et tu inclues ce header.
Une fois la structure toto_t définie il ne reste plus qu'à la lire dans le flux :
Attention aussi car tu peux avoir des soucis avec l'endianness, donc peut être que des fonctions comme ntohl peuvent t'aider à t'en abstraire.
Bonne chance
Supposons que tu saches que dans le flux, tu vas tomber sur une structure de type toto_t. Cette structure sera définie dans les spécifications de ton protocole, donc soit tu réécris la structure à la main à partir de spécifications de Xbee, soit tu connais une librairie qui définit cette structure dans un header et tu inclues ce header.
Une fois la structure toto_t définie il ne reste plus qu'à la lire dans le flux :
int ret; toto_t toto; ret = read(file, &toto, sizeof(toto_t)); if (ret == -1) { perror("read failed"); }
Attention aussi car tu peux avoir des soucis avec l'endianness, donc peut être que des fonctions comme ntohl peuvent t'aider à t'en abstraire.
Bonne chance
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 20/11/2012 à 11:16
Modifié par ABouras le 20/11/2012 à 11:16
J'ai écris la fonction suivante pour lire les données :
Mais il me manque une fonction pour remplir la variable [CODE]nbCharToread[/CODE] pour connaître le nombre de caractère à lire ... Vous en connaissez une ?
Merci d'avance !
bool readMessage(int file, char *message, unsigned int nCountMax, unsigned long* pCountRead) { int nbCharToRead; char data[] = ""; int i; if (file != 0) { nbCharToread = ????? i = 0; if (nbCharToRead > 30) { while (i<nCountMax && data != ".") { if (read(file,&data,1) == 0) { printf("reception error\n"); return false; } else { message[i] = data; i++; } } } message[i] = "\0"; *pCountRead = (unsigned long) i; return true; };
Mais il me manque une fonction pour remplir la variable [CODE]nbCharToread[/CODE] pour connaître le nombre de caractère à lire ... Vous en connaissez une ?
Merci d'avance !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 811
21 nov. 2012 à 19:39
21 nov. 2012 à 19:39
Je pense que tu fais fausse route. Il faut savoir ce que tu t'attends à lire dans ton flux pour savoir combien d'octets lire. À moins d'avoir un "caractère d'arrêt" dans ton flux, tu n'as aucun moyen de savoir quand t'arrêter. As-tu trouvé une documentation qui spécifie le flux que tu es en train d'essayer de parser ?