typestar

Copiar un archivo por bloques en C

Un búfer fijo: leer hasta quedarse corto, escribir exactamente lo leído.

#include <stdio.h>

int copy_file(const char *from, const char *to) {
    FILE *in = fopen(from, "rb");
    if (in == NULL) {
        return 0;
    }
    FILE *out = fopen(to, "wb");
    if (out == NULL) {
        fclose(in);
        return 0;
    }

    char buffer[4096];
    size_t n;
    int ok = 1;
    while ((n = fread(buffer, 1, sizeof buffer, in)) > 0) {
        if (fwrite(buffer, 1, n, out) != n) {
            ok = 0;
            break;
        }
    }
    ok = ok && !ferror(in);
    fclose(in);
    return (fclose(out) == 0) && ok;
}

Cómo funciona

  1. El tamaño del búfer intercambia memoria por llamadas al sistema.
  2. Escribe solo los bytes que la lectura devolvió.
  3. Ambos streams se cierran en cada ruta de salida.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
26
Caracteres a escribir
427
Tokens
163
Ritmo de tres estrellas
100 tpm

Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 98 segundos.

Escribe este fragmento

Paso 3 de 4 en Escritura y binario; paso 7 de 12 en Archivos y E/S.

← Anterior Siguiente →