Exo 3: Entree Sortie sur fichiers
Bonjour! j'ai le plaisir de présenter un exercice assez compliqué ... l'objectif est toujours trouver le bug.
Ce programme est sensé faire une copie du fichier fichier.mp3 vers le fichier fichier_sortie.mp3 ... Bien sur on peut changer les noms de fichiers avant la compilation si on a envie de cloner autre chose que fichier.mp3 :)
comme ça fait longtemps je redonne la ligne pour compiler le code sous linux:
gcc -Wall -ansi -pedantic SOURCE.c -o EXECUTABLE
Je vous souhaite bon courage !!!
la correction est là
Ce programme est sensé faire une copie du fichier fichier.mp3 vers le fichier fichier_sortie.mp3 ... Bien sur on peut changer les noms de fichiers avant la compilation si on a envie de cloner autre chose que fichier.mp3 :)
comme ça fait longtemps je redonne la ligne pour compiler le code sous linux:
gcc -Wall -ansi -pedantic SOURCE.c -o EXECUTABLE
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(/*int argc, char** argv*/){
int source, cible, retour;
char c;
/* ouverture du fichier qu'on va copier en lecture seule */
source = open("fichier.mp3", O_RDONLY );
if (source < 0 ){
perror("erreur à l'ouverture du fichier source \n");
return -1;
}
/* creation (et non réouverture) d'un fichier en lecture seule,
avec les droits 700 RWX pour tout le createur */
cible = open("fichier_sortie.mp3", O_CREAT | O_RDWR | O_EXCL , S_IRWXU );
if (cible < 0 ){
perror("erreur à la creation du fichier cible \n");
return -1;
}
/*<<<<<<<< lecture du fichier >>>>>>>>*/
while (1){
/*----------- lecture d'un caractere -----------*/
retour = read(source, &c, sizeof(c) );
/*condition d'arret: lecture échoue == fin du fichier */
if ( retour < 1) {
perror("read");
break;
}
/*----------- ecriture du caractere -----------*/
retour = write(cible,&c, sizeof(c) );
/*condition d'arret*/
if ( retour < 1) {
perror("write");
break;
}
}
/*<<<<<<<< fini ! >>>>>>>>*/
printf("fin \n");
close(source);
close(cible);
printf("bye \n");
return 0;
}
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(/*int argc, char** argv*/){
int source, cible, retour;
char c;
/* ouverture du fichier qu'on va copier en lecture seule */
source = open("fichier.mp3", O_RDONLY );
if (source < 0 ){
perror("erreur à l'ouverture du fichier source \n");
return -1;
}
/* creation (et non réouverture) d'un fichier en lecture seule,
avec les droits 700 RWX pour tout le createur */
cible = open("fichier_sortie.mp3", O_CREAT | O_RDWR | O_EXCL , S_IRWXU );
if (cible < 0 ){
perror("erreur à la creation du fichier cible \n");
return -1;
}
/*<<<<<<<< lecture du fichier >>>>>>>>*/
while (1){
/*----------- lecture d'un caractere -----------*/
retour = read(source, &c, sizeof(c) );
/*condition d'arret: lecture échoue == fin du fichier */
if ( retour < 1) {
perror("read");
break;
}
/*----------- ecriture du caractere -----------*/
retour = write(cible,&c, sizeof(c) );
/*condition d'arret*/
if ( retour < 1) {
perror("write");
break;
}
}
/*<<<<<<<< fini ! >>>>>>>>*/
printf("fin \n");
close(source);
close(cible);
printf("bye \n");
return 0;
}
Je vous souhaite bon courage !!!
la correction est là