Cette fonction convertit un nom de fichier en identifiant key_t
Elle est utile lorsque l'on a besoin d'un identifiant unique à partager entre plusieurs processus (mémoire partagée, fichiers mappés en mémoire)
Un exemple de lock de fichiers qui fonctionne sur toutes les versions d'Unix (à ma connaissance). Il utilise la fonction fcntl() :
Voir aussi un exemple qui marche sous Unix et Windows
Voir aussi un exemple qui ne marche que sous Windows
L'API mmap() mappe le contenu d'un fichier en mémoire. Cette technique est très utile lorsque l'on souhaite partager de la mémoire entre plusieurs processus.
Dans ce cas, on prendra toujours garde à protéger l'accès aux données avec des sémaphores si la même zone de données doit être accédée par plusieurs processus en même temps. La classe cfilemap.cpp (cfilemap.h) permet de mapper une partie d'un fichier en mémoire. Elle fonctionne aussi sous Windows (Implémentation avec CreateFileMapping()).
Elle permettent notamment de gérer l'accès aux données en mémoire partagée (par exemple) par plusieurs threads (ou processus) en implémentant un système de lock :
Voir semaphore.c (semaphore.h)
On peut préférer l'utilisation de shmget() à mmap() lorsque cette dernière n'est pas présente sur le système Unix.
Voir memshare.c (memshare.h)
Leur utilisation est très semblable aux threads de Windows. Il existe d'ailleurs un projet pour Windows et Windows CE ayant réalisé ce portage. A ne pas manquer.
Voir thread.c et le makefile venant tout droit d'Internet.