arbomont
Messages postés57Date d'inscriptionmardi 21 septembre 2004StatutMembreDernière intervention 3 février 2014
-
11 févr. 2005 à 01:13
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 2009
-
11 févr. 2005 à 06:40
Voici le TP que je dois rendre, et je coince sur un petit détail, pourriez vous m'aider ?
Il s'agit d'un programme de communication (un chat) utilisant les sockets. Un fichier log.txt enregistre la communication et mon probleme viens de l'enregistrement de ce fichier.
int main()
{ FILE *fp;
int sock, sock2, lg, pid;
struct sockaddr_in local;
struct sockaddr_in distant;
char mess[80];
...
close (sock);
printf ("connecté avec un client \n");
//bcopy("",mess);
fp = fopen("log.txt","a"); OUVERTURE DU FICHIER LOG
if(fp==NULL)
{ printf("Erreur de creation du fichier log \n");exit(1);}
while (strcmp(mess, "fin") !=0)
{
read(sock2,mess,80);
printf("%s\n",mess);
printf("entrer le message : ");
gets(mess);
write(sock2,mess,sizeof(mess)) ;
fwrite(&mess,strlen(mess),1,fp); ICI EST MON PROBLEME
}
printf ("fin dialogue avec client \n");
fclose(fp);
close (sock2);
}
return 0;
}
Le fwrite est récursif, et à chaque fois qu'il y a une écriture dans log.txt, tout le texte est concaténé (il est écrit à la suite) alors qu'il faudrait qu'il retourne à la ligne à chaque enregistrement.
Comment faire ?????
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 11 févr. 2005 à 06:40
Une solution pourrait etre de toujours commencer ton buffer mess par un '\n' pour ne jamais oublier le retour a la ligne : char mess[80] = "\n";
Et ensuite tu n'oublies jamais de l'utiliser comme ceci : fwrite(mess + 1, strlen(mess + 1), 1, fp);, Ne pas oublier le + 1.
Ou alors, tu peux le mettre a la fin de ton buffer (qui, soit dit en passant, je trouve vraiment 'petit'...) un '\n'...Voila.
J'espere que ca repond a ton questionnement.
PS : ca veut dire quoi "le fwrite est recursif" ? Tu entends quoi par la ?