Vous devez vous connecter pour exécuter votre code.
fcopy — Copie de fichier (B 5.5)
B 5.5 — Écrivez la fonction fcopy qui copie un fichier. Implémentez d'abord la version caractère par caractère, puis la version par blocs avec BUFSIZ.
#include <stdio.h>
#include <stdlib.h>
// Version par blocs (BUFSIZ)
int fcopy(const char *destfn, const char *srcfn) {
FILE *src = fopen(srcfn, "rb");
if (src == NULL) return -1;
FILE *dst = fopen(destfn, "wb");
if (dst == NULL) { fclose(src); return -1; }
char *buf = malloc(BUFSIZ);
if (buf == NULL) { fclose(src); fclose(dst); return -1; }
size_t n;
while ((n = fread(buf, 1, BUFSIZ, src)) > 0) {
if (fwrite(buf, 1, n, dst) != n) {
free(buf); fclose(src); fclose(dst);
return -1;
}
}
free(buf);
int err = ferror(src) ? -1 : 0;
fclose(src);
fclose(dst);
return err;
}
int main(int argc, char *argv[]) {
if (argc < 3) { printf("-1\n"); return 1; }
printf("%d\n", fcopy(argv[1], argv[2]));
return 0;
}