Avrei bisogno di un aiuto su questo programma che stavo scrivendo
Il programma non fa nulla di particolare, apro un filo, lo mappo in memoria e dalla memoria voglio leggere praticamente i dati che ho mappato dal file in memoria e stamparli in standard output.
Il problema è che quando da terminale invoco il programma con argomento un file contenente ad esempio i numeri 12345678910 , in output mi stampa solamente alcuni numeri o al massimo il primo. NOn capisco proprio dove sta l'errore.
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/mman.h>
#include<fcntl.h>
int main(int argc, char *argv[]){
if(argc != 2){
fprintf(stderr, "Error to input the file in line command\n");
return EXIT_FAILURE;
}
int fd;
int dim = 100;
/*prima apro il file*/
fd = open(argv[1], O_RDWR ,0644);
if( fd == -1 ){
fprintf(stderr, "Error opening the file\n");
exit(EXIT_FAILURE);
}
/*poi lo mappo in memoria*/
int *m;
size_t size = dim * sizeof(int);
m = mmap(NULL, size, PROT_WRITE | PROT_READ, MAP_SHARED ,fd ,0);
if( m == NULL ){
perror ("mmap");
exit(EXIT_FAILURE);
}
/*chiudo il file*/
if( close(fd) == -1 )
perror("close");
/*stampo su standard output*/
int i;
for(i=0; (i< dim) && (m[i] != EOF); i++)
putchar(m[i]);
int r;
r = munmap(m, size);
if(r!=0)
perror("unmap");
return EXIT_SUCCESS;
}