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à
par JJ
publié dans :
Exercices