Med IPC för trådlös kryptering med Intel Galileo (5 / 10 steg)
Steg 5: Öppna/stäng funktioner
Öppen I den öppna metoden, fyra nycklar skapas med hjälp av olika filer och ID anges (måste vara noll) när denna instans av IPCBuffer skapades. Detta möjliggör endast 255 IPCBuffer objekt som ska används på en gång.
Den buffert som används för att hålla data mellan Python och skissa processer definieras av dess bredd och längd. Bredd är antalet byte som utgör en enda enhet för data. Till exempel krypterar AES data i 16-byte block så bredden skulle vara 16. Det gör i detta fall vettigt att tillåta en process för att läsa mer eller mindre än 16 byte i taget eftersom data är ofullständig. Senare får vi se varför vi inte tillåter en process att läsa eller skriva mer än en bredd till ett värde av data på en gång.
Längden på bufferten är hur många enheter av data som det kan lagra. Så om bufferten kan hålla 5 AES kvarter, dess längd skulle vara 5 och dess totala storlek i byte skulle vara (16 byte) * 5 = 80 byte. För att en process för att veta var de bör läsa eller skriva nästa i bufferten, behöver vi ett huvud och svans index. Data skrivs till bufferten på huvudet och läsa från svansen. Dessa fyra bitar av data placeras i början av det delat minnessegmentet. Annars skulle inte Python skript vet hur stor buffert är eller om det bör läsa eller skriva data. Bilden ovan illustrerar hur ett delat minnessegment skulle ställas in för en bredd av 2- och 4.
Semaforen som representerar den fri utrymmet i bufferten initieras till 'längd' och semaforen för hur mycket giltiga data finns i bufferten är satt till 0. En tredje semafor, sem_lock, sätts till 1 att vi tillåter bara en enda process att läsa eller skriva från det delat minnessegmentet i taget. Utan detta lås skulle koden inte vara säkra med flera läsare och författare.
Nära Metoden close förstör helt enkelt de nuvarande IPC-objekt. shmdt lossnar det delat minnessegmentet och shmctl (som har liknande argument att semctl) markerar segmentet som ska tas bort. När inga fler processer är kopplade det willl tas bort. På denna punkt visas dess nyckel som 0 i katt /proc/sysvipc/shm. Efter att semctl ta bort semaforer de kommer omedelbart att tas bort och katt /proc/sysvipc/sem kommer inte längre att visa dem