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
- El tamaño del búfer intercambia memoria por llamadas al sistema.
- Escribe solo los bytes que la lectura devolvió.
- Ambos streams se cierran en cada ruta de salida.
Palabras clave y builtins usados aquí
FILENULLbreakcharconstifintreturnsize_tsizeofwhile
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.
Paso 3 de 4 en Escritura y binario; paso 7 de 12 en Archivos y E/S.