Besoin d'aide : TP école d'ingénieur

arbomont Messages postés 57 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 3 février 2014 - 11 févr. 2005 à 01:13
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 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.

Voici un extrait du code :

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <strings.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>


#define PORT 12345


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 ?????

JC

2 réponses

cs_magma Messages postés 198 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 18 mars 2011
11 févr. 2005 à 06:37
Ajouter un saut de ligne a mess avant ecriture dans le fichier:

mess[strlen(mess)] = '\n';
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
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 ?

+2(p - n)
0
Rejoignez-nous