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