Ich versuche, ein simples cp in C mittels fread(3) und fwrite(3) zu implementieren. Leider habe ich dabei ein Problem: Der Ausgabedatei fehlen immer zwei Byte an Daten. Kann mir jemand das erklären?
Der Anlass hierzu war, dass man anscheinend mit getc und putc keine Binärdateien bearbeiten kann, weil putc ein unsigned char schreibt.
Hier der Code (die Fehlerbehandlung ist noch nicht so großartig).
Code: Select all
#include <stdio.h>
void copy2(FILE *from, FILE *to){
int buf[60];
int size;
while( ! feof(from) ){
size = fread( buf, sizeof(int), 60, from);
fwrite( buf, sizeof(int), size, to);
}
}
int main(int argc, char **argv){
FILE *from, *to;
if(argc != 3){
fprintf(stderr, "I can only copy one file to another...\n");
fprintf(stderr, "Usage: %s from_file to_file.", argv[0]);
return -1;
}
if( (from = fopen(argv[1], "r")) == NULL){
fprintf(stderr, "Could not read %s.\n", argv[1]);
return -2;
}
if( (to = fopen(argv[2], "w")) == NULL){
fprintf(stderr, "Could not write %s.\n", argv[2]);
return -3;
}
copy2(from, to);
fclose(from);
fclose(to);
return 0;
}