Exo 3: Entree Sortie sur fichiers

Publié le par JJ

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


#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;
   
}


Je vous souhaite bon courage !!!

la correction est là


Publié dans Exercices

Commenter cet article