Salve a tutti, avrei un problema con questo programma, non capisco dov'è l'errore.Concettualmente è semplice, deve leggere da un file e copiare il contenuto nell'altro file. I file sono aperti in binario.
Esempio : nel primo file è memorizzata la seguente sequenza di byte
30002000100020003000400050006000
i primi due interi 3 e 2 indicano che ci sono esattamente 3 x 2 = 6 elementi da copiare
e scrive nel secondo file con il medesimo formato
100020003000400050006000
/*Proviamo a leggere da un file in binario e a
scrivere lo stesso contenuto in un altro file.
I due file vengono passati come parametri in ingresso
da linea di comando.*/
#include<stdio.h>
#include<stdlib.h>
FILE * open_read_file(const char *pathname)
{
FILE *fp;
fp = fopen(pathname,"rb");
if(fp == NULL){
perror("in fopen");
exit(EXIT_FAILURE);
}
return fp;
}
int read_size(FILE *f, int *row, int *col)
{
int righe, colonne;
if(fscanf(f,"%d",&righe) == 0){
perror("in fscanf");
exit(EXIT_FAILURE);
}
if(fscanf(f,"%d",&colonne) == 0){
perror("in fscanf");
exit(EXIT_FAILURE);
}
int dimension = righe * colonne;
*row = righe;
*col = colonne;
return dimension;
}
void save_elements(int * buffer, int size, FILE *f)
{
ssize_t c;
int r = 0;
while(r < size){
c = fread(buffer,sizeof(int),size,f);
if(c == 0){
fprintf(stderr,"End of file\n");
return;
}
buffer += c;
r += c;
}
}
FILE * open_write_file(const char *pathname)
{
FILE *f;
f = fopen(pathname,"wb");
if(f == NULL){
perror("in fopen");
exit(EXIT_FAILURE);
}
return f;
}
void print_on_file(FILE *f ,int *buf, int size)
{
ssize_t c;
int r = 0;
while(r < size){
c = fwrite(buf,sizeof(int),size,f);
if(c == 0){
perror("in fwrite");
return;
}
buf += c;
r += c;
}
}
int main(int argc, char *argv[])
{
if(argc != 3){
fprintf(stderr,"Usage : %s <filename> <filename> \n",argv[0]);
return EXIT_FAILURE;
}
FILE *f1, *f2;
f1 = open_read_file(argv[1]);
int r, c, size;
size = read_size(f1,&r,&c);
int buf[size];
/*buf = malloc(size * sizeof(int));
if(buf == NULL){
perror("in malloc");
exit(EXIT_FAILURE);
}
*/
save_elements(buf,size,f1);
f2 = open_write_file(argv[2]);
print_on_file(f2,buf,size);
return EXIT_SUCCESS;
}