47 lines
1.5 KiB
C
47 lines
1.5 KiB
C
#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
|
|
}
|