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

  FORUM HardWare.fr
  Programmation

  advanced UNIX :mmap()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

advanced UNIX :mmap()

n°123108
cityhunter​xyz
100111011010010011 bip!
Posté le 08-04-2002 à 11:19:49  profilanswer
 

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)?

mood
Publicité
Posté le 08-04-2002 à 11:19:49  profilanswer
 

n°123136
Jar Jar
Intaigriste
Posté le 08-04-2002 à 11:56:54  profilanswer
 

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


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°123165
SoWhatIn22
Posté le 08-04-2002 à 13:18:30  profilanswer
 

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.

n°123210
cityhunter​xyz
100111011010010011 bip!
Posté le 08-04-2002 à 14:29:20  profilanswer
 

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]

n°123478
cityhunter​xyz
100111011010010011 bip!
Posté le 09-04-2002 à 10:34:16  profilanswer
 

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() !!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  advanced UNIX :mmap()

 

Sujets relatifs
[Shell Unix] Une question un peu compliquée[Shell Unix] J'ai un problème avec la commande cat
Compression/Decompression UNIX[PHP,JAVA, web quoi]Convertir un fichier Unix en fichier dos
C sous dos et sous Unix[C/C++ UNIX] sleep en millisececondes ?!?!?! PLEASE HELP !!!
[UNIX SHELL + C] Fichiers ouverts ?Lancer un script perl dans un autre script perl sous UNIX
[C/Unix] Conversion d'un int en char* (plus con tu meurs)[C/ unix] poru utiliser la souris en c, mode console ?!
Plus de sujets relatifs à : advanced UNIX :mmap()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR