MED fichier

◆ MEDmemFileOpen()

med_idt MEDmemFileOpen ( const char *const  filename,
med_memfile *const  memfile,
const med_bool  filesync,
const med_access_mode  accessmode 
)

Ouverture d'un fichier MED pour une utilisation en mémoire.

Paramètres
filenameNom du fichier.
memfilefichier mémoire.
filesyncsynchronise ou non le fichier mémoire avec un fichier disque.
accessmodeMode d'acces au fichier.
Valeurs retournées
med_idtIdentificateur du fichier.

Cette routine permet de créer, lire ou modifier un fichier mémoire au format MED. Le contenu du fichier mémoire peut-être crée par les appels habituels de l'API MED ou initialisé à partir d'un fichier MED existant.Une fois le fichier mémoire fermé par MEDfileClose, le fichier mémoire reste disponible pour être transmis et de nouveau ouvert/modifié par un nouvel appel à MEDmemFileOpen.

Remarques
Gestion de la mémoire
  • La structure memfile doit impérativement être initialisée à MED_MEMFILE_INIT.
  • Une fois memfile initialisé à MED_MEMFILE_INIT, la gestion de l'allocation mémoire peut être laissée à la charge de MED. La désallocation de memfile.app_image_ptr reste à la charge de l'utilisateur.
  • Si (memfile.app_image_ptr == 0 ) : La place mémoire utilisée par les différents appels medfichier sera allouée par medfichier et accessible par le pointeur medfile.image_ptr. L'emprise mémoire utilisée par l'ensemble des appels à medfichier est indiquée dans memfile.app_image_size au fil des appels. La désallocation est à la charge de l'utilisateur.
  • Si (memfile.app_image_ptr <> 0) et (memfile.app_image_size <> 0) : L'utilisateur a pré-alloué un emplacement d'acceuil au fichier mémoire, cet emplacement sera utilisé par MED dans les différentes fonctions de l'API. Si la taille réservée est insuffisante, MED réallouera la taille nécessaire et mettra à jour le champ memfile.app_image_size. Ce mécanisme suppose que l'utilisateur n'utilise pas d'alias du pointeur memfile.app_image_ptr de façon concurrente à MED.
    Il est de la responsabilité de l'utilisateur de prendre connaissance des eventuels changements de taille et de valeur du pointeur.
    Après l'appel à MEDfileClose, MED n'utilise plus l'image mémoire. Il est possible de vérifier qu'il n'existe plus d'accès à l'image mémoire en s'assurant que memfile.fapl_ref_count et memfile.vfd_ref_count sont tous les deux nuls.
Gestion des droits et fichier disque

Si le paramètre syncfile est à MED_FALSE, MEDmemFileOpen ne s'occupera pas de la présence d'un fichier disque de même nom que l'image mémoire.
Si le paramètre syncfile est à MED_TRUE, MEDmemFileOpen gardera la cohérence entre le fichier disque crée ou déjà présent et l'image mémoire en fonction du mode d'accès demandé.
  • Mode MED_ACC_RDEXT : Mode interdit.
  • Mode MED_ACC_CREAT :
    Si filesync == MED_FALSE : Un nouvel accès fid au fichier mémoire memfile est crée, aucun fichier disque n'est utilisé (un fichier disque de même nom peut exister mais ne sera pas utilisé). Si le fichier mémoire possédait une image MED valide, elle sera réinitialisée.
    Si filesync == MED_TRUE : Un nouvel accès fid au fichier mémoire memfile est crée, un nouveau fichier disque de même nom est également crée (un fichier disque de même nom peut déjà exister, il sera alors écrasé). Tous les appels MED seront effectués en mémoire et sur le fichier jusqu'à l'appel de MEDfileClose (pas forcément de façon synchrone jusqu'à la fermeture).
  • Mode MED_ACC_RDWR :
    Si filesync == MED_FALSE : Un nouvel accès fid au fichier mémoire memfile existant et valide est crée qu'un fichier disque de même nom existe ou non. Les appels MED seront effectués uniquement en mémoire.
    Si filesync == MED_TRUE : Un nouvel accès fid au fichier mémoire memfile est crée.S'il n'existe pas de fichier disque de même nom, l'image memfile doit exister et être valide; un fichier disque de même nom est crée et maintenu en cohérence (il faut au moins un appel MED en écriture/création pour que la synchronisation du fichier se fasse).S'il existe un fichier disque de même nom, l'image memfile est réinitialisée par le contenu du fichier. La cohérence est maintenue entre fichier mémoire et fichier disque.
  • Mode MED_ACC_RDONLY :
    filesync = MED_TRUE | MED_FALSE : Le fichier mémoire est initialisé à partir d' un fichier disque de même nom (forcément existant). Les appels MED en lecture seront effectués uniquement en mémoire, le fichier restera dans son état intial. Les appels MED en écriture échoueront.

Définition à la ligne 43 du fichier MEDmemFileOpen.c.