Le dup, c'est juste pour m'économiser une fonction. sa me permet d'utiliser la même fonction pour afficher en console que pour écrire dans le fichier. Mais si c'est une cause du problème qui m'empêche de réaliser ce que je veux je peux faire une fonction juste pour écrire aussi c'est pas tellement dérangeant.
Bref, j'ai pu récupérer le code.
Dans mon cas, en fait je lis dans une socket (ce qui complique un peu le problème^^)
- Code: Tout sélectionner
// fonction qui récupère le fichier envoyé par le serveur puis l'écrit, soit sur l'écran, soit sur un autre fichier après dup
void affiche_fichier(int socket, int taille)
{
int k;
if ( taille >0 ){
char buffer[taille];
for (k = 0; k < taille;k++){
read(socket, &buffer[k], 1);
}
buffer[taille] = '\0';
printf("%s",buffer);
}
}
Effectivement je mettais bien le \0 pour compléter mon buffer.
La taille représente la taille de mon fichier que je calcule comme ceci
- Code: Tout sélectionner
int taille_fichier(char *filename){
FILE *fich;
int taille;
fich = fopen(filename, "rb");
if(fich){
fseek(fich, 0, SEEK_END);
taille =ftell(fich);
fclose(fich);
return taille;
}
return 0;
}
Par contre, je ne sais pas vraiment comment les données sont envoyé sur la socket puisque je n'utilise pas vraiment un vrai serveur.
Pour faire mes tests, je fais un truc de ce style là qui remplace mon serveur dans la console
- Code: Tout sélectionner
while true; do nc -l numPort <fichierAtransmettre;done
Du coup, quand je fais ça, je ne sais pas si le fichier est bien envoyé en binaire ou non; ce que je peux affirmer c'est que ça marche comme il faut avec les chaines.