2014-06-22 4 views
0

Quelqu'un peut-il expliquer comment je peux implémenter une fonction mread, en utilisant l'appel système read(). Cette méthode doit lire les contenus qui se trouvent dans le fichier mmapped et les lire dans un tampon. J'ai accès au fichier mmapped et à la mémoire tampon au moyen de pointeurs. (c'est-à-dire void * addr et void * buff).Lire un fichier mappé et le stocker dans un tampon

Votre aide est grandement appréciée.

Essayez jusqu'à présent:

int fd; 

if ((fd = open("file.hole",O_RDWR, "rb")) < 0) { 
    perror("create .hole file error"); 
    exit(EXIT_FAILURE); 
} 

if (write(fd, addr, count)!= count) { 
    perror("Cannot write from address"); 
    exit(EXIT_FAILURE); 
} 

buff = (char*)malloc(count * sizeof(char *)); 

if (read(fd, buff, count)) { 
    perror("Cannot read from file descriptor to the buffer"); 
    exit(EXIT_FAILURE); 
} 
+0

int fd; si ((fd = ouvert ("fichier.hole", O_RDWR, "rb")) <0) { perror ("créer une erreur de fichier .hole"); exit (EXIT_FAILURE); Si (écrire (fd, addr, compte)! = Nombre) { perror exit (EXIT_FAILURE); } buff = (char *) malloc (compte * sizeof (char *)); If (read (fd, buff, count)) { perror ("Impossible de lire le descripteur de fichier vers le tampon"); exit (EXIT_FAILURE); } – Samba693

+0

Ou peut-être que je peux attribuer un caractère par caractère tel que le code suivant? buff = (char *) malloc (count * sizeof (char *)); pour (int i = 0; i Samba693

+0

Copie possible: http://stackoverflow.com/questions/24350294/using-read-and-write-system-calls-to-access-mmapped-memory – Damon

Répondre

0

Désolé, ce peut-être pas une solution complète, mais je n'ai pas la réputation suffisante pour ajouter uniquement des commentaires.

Si vous avez besoin de lire les données du fichier mmaped (supposé que vous avez appelé mmap() sur un fichier), vous n'avez pas besoin de l'appel système read(); vous avez juste besoin de copier le contenu de addr à buff. Si vous avez besoin d'un appel système read() pour copier des données d'un fichier vers un tampon, vous n'avez pas besoin de mmap(); vous devriez simplement faire open() sur le fichier pour obtenir un fd, puis faire read() des données de la fd vers le tampon.

+0

Donc pour copier le contenu: serait-il correct de le faire? comme ça? : buff = (char *) malloc (count * sizeof (char *)); pour (int i = 0; i Samba693

+0

Vous pouvez utiliser memcpy (buff, addr, ADDR_SIZE), où ADDR_SIZE doit être connu lorsque vous appelez mmap(). D'ailleurs, l'argument passé dans malloc devrait être "count * sizeof (char)". –

Questions connexes