Jericho 0 Posté(e) le 31 janvier 2007 Partager Posté(e) le 31 janvier 2007 Bonjour, dans le cadre d'un cours de langage C (les threads exactement) sous Unix, je dois faire une lecture dans un fichier texte contenant des caractères. Je dois ensuite comparer une certaine chaine de caractère à ce fichier et s'il s'y trouve, compter le nombre de fois. Si je fais appel à vous, c'est que bien entendu, mon code ne fonctionne pas Voici ma fonction : void * traitement(structP param) { static int vr = 1000; int hdFich; int cpt = 0; int i = 0; char szDonnee[6]; //Ouverture du fichier puts("th>Ouverture du fichier"); while (i != 20) { hdFich = open("data.txt",O_RDWR); lseek(hdFich,i*sizeof(szDonnee)-1,SEEK_CUR); puts("th>Lecture dans le fichiern"); read(hdFich,&szDonnee,sizeof(szDonnee)); if(strcmp(szDonnee,"printf") == 0) { cpt ++; } printf("th>Chaine : %sn",szDonnee); close(hdFich); i++; } printf("Le mot a ete trouve %d fois !n",cpt); pthread_exit(&vr); } Et le résultat : Creation du premier thread fils th>Ouverture du fichier th>Lecture dans le fichier th>Chaine : printf th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint th>Lecture dans le fichier th>Chaine : fprint Le mot a ete trouve 0 fois ! Valeur renvoyee par le thread secondaire = 1000 Fin ... Si vous pouvez m'aider, ce serait bien sympathique (Mon fichier data.txt contient des printf partout ) Lien à poster
An Alach 0 Posté(e) le 31 janvier 2007 Partager Posté(e) le 31 janvier 2007 La fonction strcmp compare deux chaînes de caractères terminées par un caractère nul. Or ton tableau szDonnee contient juste les 6 caractères lus depuis le fichier, rien ne garantie la présence d'un 0 final. Tu devrais plutôt utiliser strncmp (ou ajouter un 0 à la fin du tableau). Lien à poster
Jericho 0 Posté(e) le 31 janvier 2007 Auteur Partager Posté(e) le 31 janvier 2007 Merci pour ta réponse! Ca m'était complètement sorti de la tête ce 0 de fin de chaine J'essayerai ça demain à l'école. Lien à poster
rjds 0 Posté(e) le 1 février 2007 Partager Posté(e) le 1 février 2007 deja ton appel de thread est pas tres bon. Tu ne peux passer qu'un pointeur au thread donc tu devrais avoir un prototype du genre int *monthread(void *monparam) et ensuite faire un truc du genre : struct mastructure *p = (struct mastructure *)monparam; pourquoi ne pas utiliser les primitives haut niveau pour ouvrir et lire ton fichier : fopen, fclose, fread... http://www.cplusplus.com/fopen c'est plus recommandé pour une meilleur portabilité en plus. Lien à poster
rjds 0 Posté(e) le 1 février 2007 Partager Posté(e) le 1 février 2007 a quoi sert la declaration static int vr ?? surtout si tu la retourne a la fin du thread ? Pourquoi ouvrir 20 fois le fichier ?? une fois suffit. Ton code ne permet pas de lire le fichier completement en plus. en gros il ne lit que 20*6 octets au maximum Lien à poster
Messages recommandés