In het Unix-besturingssysteem , een pijp is een logisch systeem apparaat dat communiceert tussen twee Unix processen . Sinds een pijp worden gegevens tussen twee processen op een First - In - First - Out basis , worden ze ook wel FIFO pijpen . Er zijn twee soorten buizen in Unix - de naam en het naamloze pipes . Ze zijn hetzelfde in gedrag en semantiek , behalve dat named pipes hebben een naam en een vermelding in het telefoonboek , als een bestand . Named pipes bieden het voordeel van beveiliging met lees - schrijf rechten evenals automatische bescherming door het systeem wanneer ze worden gedeeld door veel processen . Maak een Named Pipe Op de commandoregel Het programma " mknod " en " mkfifo " maak een named pipe op de shell prompt . De eerste letter van de invoer is " p ", wat aangeeft dat het apparaat is een pijp . " 0666 " is de modus gebruikt, die wordt gewijzigd met behulp van de huidige waarde van umask . Start het programma " man " voor gedetailleerde handleiding inzendingen op " mknod " en " mkfifo ' op uw systeem . " mknod " is een generieke commando voor alle typen apparaten $ mknod nmpipe_multiway por $ mkfifo nmpipe_multiway 0666 Zie de pijp als een directory listing : . $ ls-l < br > Maak een Named pipe in een C-programma Bel het Unix-systeem functie mkfifo ( ) om de named pipe in een program.The eerste parameter te creëren is de naam van de pijp en het pad aan. "Mode " geeft de toegangsrechten waarmee u de named pipe te creëren . De functie neemt de O_CREATE | O_EXCL vlaggen , wat betekent dat het zal een foutmelding geven als de pijp al bestaat . Een return waarde van nul geeft aan dat de pijp is aangemaakt De functie prototype is : . Int mkfifo ( const char * pad , mode_t modus ) ; Open het Named pipe Bel het Unix-systeem functie open () of de standaard C library call fopen ( ) naar een named pipe openen als alleen-lezen , alleen schrijven of lezen schrijven , volgens de parameter van het programma loopt . Daarentegen zijn naamloze pipes gemaakt met de pijp ( ) oproep . Gedrag van de open () functie is hetzelfde voor alle apparaten inclusief bestanden . Bij succesvolle , open () retourneert een device descriptor en fopen ( ) de wijzer keert terug naar de C library structuur "FILE . " Verschillende processen kunnen lezen en schrijven naar de named pipe . Als een proces opent de buis voor het lezen, het slaapt totdat een ander proces opent de zelfde pijp voor het schrijven en vice - versa . De Unix kernel , of kern , wekt de slaap proces zodra de verwachte gebeurtenis zich voordoet . Lees - Schrijven op FIFO Bel de functies read ( ) en schrijven ( ) te lezen van en schrijven naar named pipes . Met pijpen , het FIFO concept is vergelijkbaar met een schrijfproces met een einde van de buis en een leesproces van het andere uiteinde . Het aantal processen lezen mag niet gelijk zijn aan het aantal processen schrijven . Als er meer dan een proces leest of schrijft , de processen coördineert de werkzaamheden met behulp van de multi - tasking algoritmen in Unix . De Unix kernel behandelt gegevens in een pijp als het bestand gegevens zou behandelen . Bij een named pipe , de wijze waarop deze wordt geopend dwingt vereiste veiligheid . Ook zijn named pipes automatisch beveiligd wanneer gedeeld door meerdere processen : Synchronisatie om data-integriteit te handhaven valt op de schouder van de programmeur bij het gebruik van niet nader genoemde leidingen Managing vol of leeg Pijpen Als een proces probeert om gegevens te schrijven naar een pijp en er geen ruimte is , drukt de kernel het proces om te slapen tot de pijp schrijft de gegevens naar fysieke opslag . Ook een poging om te lezen uit een lege pijp zet het proces om te slapen tot een ander proces schrijft gegevens naar de buis . In deze gevallen , de kernel behandelt naam en naamloze pipes gelijk. Sluit een Named Pipe Bel het systeem functie close ( ) of standaard C -functie fclose ( ) om sluit een named pipe . Het sluiten van een named pipe is hetzelfde als een bestand sluit , behalve dat de kern volgens een bijzondere procedure voordat de middelen bezet door de buis . Als slapen processen wachten op de buis te lezen , de Unix kernel wakker ze op en ze terugkomen van het lezen ( ) functie zonder gegevens . Als er geen lees -processen op deze buis en sommige processen zijn slapen op schrijven , de kernel wakker ze op en ze terug te keren zonder het schrijven . Bij het sluiten van een named pipe , de kernel behandelt het als een naamloos pijp voor consistentie.
|