#include <stdio.h>   // pour printf, fprintf, fopen, fread, fwrite, fclose
#include <stdlib.h>  // pour exit()

int main(int argc, char *argv[]) {
    FILE *source, *dest;   // pointeurs de fichiers
    char c;                // variable pour stocker un octet lu

    // Vérifier que l'utilisateur a bien fourni deux arguments (source et destination)
    if (argc != 3) {
        fprintf(stderr, "Usage: %s <fichier_source> <fichier_dest>\n", argv[0]);
        exit(1); // quitte le programme avec code d'erreur
    }

    // Ouvrir le fichier source en mode lecture binaire ("rb")
    source = fopen(argv[1], "rb");
    if (source == NULL) { // si l'ouverture échoue
        perror("Erreur ouverture source");
        exit(1);
    }

    // Ouvrir ou créer le fichier destination en mode écriture binaire ("wb")
    dest = fopen(argv[2], "wb");
    if (dest == NULL) { // si l'ouverture échoue
        perror("Erreur ouverture destination");
        fclose(source); // on ferme le fichier source déjà ouvert
        exit(1);
    }

    // Lire un octet depuis le fichier source puis l'écrire dans le fichier destination
    while (fread(&c, 1, 1, source) == 1) {
        if (fwrite(&c, 1, 1, dest) != 1) {
            perror("Erreur écriture");
            fclose(source);
            fclose(dest);
            exit(1);
        }
    }

    // Fermer les deux fichiers
    fclose(source);
    fclose(dest);

    // Indiquer que la copie s'est terminée correctement
    printf("Copie terminée (méthode stdio).\n");
    return 0; // programme terminé sans erreur
}
