Namnlös rör

En anonym pipe är en av metoderna för interprocess  communication ( IPC ) i operativsystemet , som är tillgängligt för relaterade processer - förälder och barn. Representerat som ett minnesområde på en extern lagringsenhet som hanteras av operativsystemet, som allokerar delar av detta minnesområde till interagerande processer för gemensamt arbete. Organisationen av data i kanalen använder FIFO- strategin , det vill säga informationen som först skrivs till kanalen kommer att vara den första som läses från kanalen.

En viktig skillnad mellan ett namnlöst rör och en fil är att informationen som läses omedelbart tas bort från den och inte kan läsas igen. Exekveringen av ovanstående systemanrop kan försätta processen i ett vänteläge. Detta inträffar om en process försöker läsa data från ett tomt rör eller skriva data till ett helt rör. Processen vaknar när det finns data i kanalen respektive när det finns ledigt utrymme i kanalen.

Tvåvägskommunikation mellan processer kräver vanligtvis två namnlösa rör.

Namnlösa rör i Unix

Systemanropet används för att skapa ett namnlöst rör pipe. En matris med två heltal är utdataparametern för detta systemanrop. Om samtalet slutfördes normalt, så innehåller matrisen två filbeskrivningar: för att läsa information från kanalen respektive för att skriva till den. När en process skapar en annan process, ärvs förälderns handtag av barnet, och på så sätt etableras kommunikation mellan de två processerna. En av dem använder en skrivskyddad pipe, och den andra är skrivskyddad. Därför, om till exempel data ska överföras genom ett rör från en överordnad process till en underordnad process, stänger den överordnade processen läshandtaget till röret omedelbart efter att den underordnade processen startar, och den underordnade processen stänger skrivhandtaget för att röret. Om dubbelriktad kommunikation behövs skapar moderprocessen två kanaler, varav en används för att överföra data i en riktning och den andra i den andra.

Ett systemanrop används för att skriva information till en kanal write. Att läsa information från en kanal - ett systemsamtal read. Det första argumentet för dessa anrop är en kanaldeskriptor av typen int, det andra är en pekare till minnesområdet med vilket utbytet sker, av typen void, det tredje är antalet byte, en heltalstyp. Båda anropen returnerar antalet överförda byte (eller "-1" vid fel). När röret tar slut skickar processen ett systemanrop close.

Namnlösa rör på Windows

Liksom många andra kommunikationsmetoder mellan processer skapas och konfigureras namnlösa pipes med hjälp av Windows API- funktioner . CreatePipeanvänds för att skapa ett namnlöst rör. Denna funktion returnerar två deskriptorer (för läsning respektive skrivning till kanalen). För att en underordnad process ska ärva handtag måste den skapas av en funktion CreateProcessmed arvsflaggan TRUE. Efter att ha mottagit den nödvändiga beskrivningen kan processen interagera ytterligare med kanalen genom att använda funktionerna ReadFileoch WriteFile, som tillhandahåller läsinformation från kanalen respektive skrivinformation till kanalen. När du är klar med kanalen måste båda processerna stänga handtagen med CloseHandle.

Länkar