Étape 5: Les fonctions d’ouverture/fermeture
Ouvert Dans la méthode open, quatre touches sont créés à l’aide de différents fichiers et l’ID spécifié (doit être différent de zéro) lorsque cette instance de IPCBuffer a été créée. Cela permet seulement 255 IPCBuffer objets seraient utilisés à la fois.
La mémoire tampon utilisée pour stocker les données entre Python et esquisser des processus est définie par sa longueur et la largeur. La largeur est le nombre d’octets qui composent une seule unité de données. Par exemple, AES crypte les données en blocs de 16 octets donc la largeur serait de 16. Il n’est pas sensé dans ce cas afin de permettre un processus à lire plus ou moins de 16 octets à la fois, étant donné que les données seraient incomplètes. Nous verrons plus tard pourquoi nous n’autorisons pas un processus de lire ou d’écrire une valeur de plus d’une largeur de données à la fois.
La longueur de la mémoire tampon est le nombre d’unités de données qu’il peut stocker. Donc si la mémoire tampon peut contenir 5 pâtés de maisons AES, sa longueur serait 5 et sa taille totale en octets serait (16 octets) * 5 = 80 octets. Dans l’ordre d’un processus de savoir où il doit lire ou écrire ensuite dans la mémoire tampon, il faut un indice de la tête et la queue. Données sont écrites dans la mémoire tampon à la tête et lire à partir de la queue. Ces quatre éléments de données doivent être placées au début du segment de mémoire partagée. Sinon le script Python ne sais pas quelle taille de la mémoire tampon est ou où il doit lire ou écrire des données. La photo ci-dessus illustre comment un segment de mémoire partagée serait mis en place pour une largeur de 2 et de longueur égale à 4.
Le sémaphore qui représente l’espace libre dans la mémoire tampon est initialisé « longueur » et le sémaphore pour la quantité de données valide est dans la mémoire tampon est défini sur 0. Un troisième sémaphore, sem_lock, est défini sur 1, afin que nous permettons seulement un processus unique lire ou écrire le segment de mémoire partagée à la fois. Sans cette serrure le code ne serait pas sécuritaire avec plusieurs lecteurs et écrivains.
Proche La méthode close détruit simplement les objets actuels de la CIB. shmdt se détache du segment de mémoire partagée et shmctl (qui a des arguments similaires à semctl) marque le segment à supprimer. Quand aucun processus plus ne sont attachés il willl être supprimé. À ce stade sa clé apparaîtra comme 0 dans /proc/sysvipc/shm de chat. Après avoir appelé semctl pour supprimer les sémaphores, qu'ils seront immédiatement supprimés et chat /proc/sysvipc/sem n’est plus leur montrerai