Chiarimento su programma C/POSIX

di il
4 risposte

Chiarimento su programma C/POSIX

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;
}

4 Risposte

Devi accedere o registrarti per scrivere nel forum
4 risposte