Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1843 connectés 

 


Dernière réponse
Sujet : advanced UNIX :mmap()
cityhunterxyz bon voici la réponse :
si l'on mmap un fichier et qu'on accède en dehors du fichier alors on a un sigbus....
pour la mémoire partagée utiliser shm_open() qui n'est pas dans les man pages mais dispo dans <sys/mman.h> c'est une commande posix... :)
et c'est plus facile à utiliser que shmget() ;)
!!!! shm_open retourne un fd ce dernier peut être fermé avec close() mais il semble que la mémoire ne soit désalouée qu'avec l'appel à shm_unlink() !!!

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
cityhunterxyz bon voici la réponse :
si l'on mmap un fichier et qu'on accède en dehors du fichier alors on a un sigbus....
pour la mémoire partagée utiliser shm_open() qui n'est pas dans les man pages mais dispo dans <sys/mman.h> c'est une commande posix... :)
et c'est plus facile à utiliser que shmget() ;)
!!!! shm_open retourne un fd ce dernier peut être fermé avec close() mais il semble que la mémoire ne soit désalouée qu'avec l'appel à shm_unlink() !!!
cityhunterxyz oui je sais, c'est déjà un multithread  
mais en fait l'api de ma lib utilise des commandes posix like : open, close, read, write, ioctl, mmap...  
   
et je me suis demandé s'il ne serait pas possible d'utiliser le vrai mmap pour faire une bonne partie du travail... surtout que je veux à therme permettre d'interrompre le système et de résumer et utiliser mmap pour sauvegarder les buffers cela me semble une bonne idée : je crée un fichier je le mmap, tant que je ne fais pas de msync rien n'est écrit, et si je veux sauvegarder j'ai juste à faire un msync...  
le problème c'est de savoir ce qui se passe si l'on mmap après la fin.....  
je vais tester ce soir...  
 
et puis il y aurait peut être besoin de partage entre process... je suis en pleine exploration alors les idées elle pleuvent et souvent je m'aperçoit après coup que ce n'est pas une si bonne idée.... :pt1cable:

 

[jfdsdjhfuetppo]--Message édité par cityhunterxyz--[/jfdsdjhfuetppo]

SoWhatIn22

Jar Jar a écrit a écrit :

Si tu veux partager beaucoup de mémoire, ça ne serait pas plus simple d'utiliser des threads POSIX ?  




Sauf qu'il veut partager de la mémoire entre 2 process, pas 2 threads.
 
Quel est l'intéret d'utiliser des threads pour partager de la mémoire entre processus distincts?
Sauf si les process sont crés avec la commande fork(), auquel cas je suis d'accord avec toi: il serait sans doute possible de revoir un peu la conception du programme pour qu'il soit multithrred au lieu de multiprocess.

Jar Jar Si tu veux partager beaucoup de mémoire, ça ne serait pas plus simple d'utiliser des threads POSIX ?
cityhunterxyz bonjour,    
je suis face au problème suivant : je veux partager beaucoup de mémoires entre deux process, je voudrais le faire en utilisant mmap().    
je suis sous linux, j'ai donc pensé à utiliser shmget (shared memory d'ipc) mais cela permet d'alouer 4M au max  hors il me faudrait 32M environ... (1024*768*32*10)    
quelqu'un sait il ce qui se passe si    
1/ je crée un fichier    
2/ je le mmap plusieurs fois avec des offset diff    
3/ je modifie la mémoire (ce qui est equivalent à écrire dans le fichier)    
4/ je ne fais pas de msync()    
   
est ce que cela va : fonctionnner de la manière attendue cad allouer de la mémoire, permettre de modifier cette mémoire (les bons flags sont possitionés) entre divers process    
   
en fait je me pose la question : que ce passe t il si l'on mmap() un fichier avec un offset en dehors du fichier (par ex un fichier de 1ko mmapé avec un offset de 1M)?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)