Unavngivet rør

En anonym pipe er en af ​​metoderne til interprocess  communication ( IPC ) i operativsystemet , som er tilgængelig for relaterede processer - forælder og barn. Repræsenteret som et hukommelsesområde på en ekstern lagerenhed, der styres af operativsystemet, som allokerer dele af dette hukommelsesområde til interagerende processer til fælles arbejde. Organiseringen af ​​data i kanalen bruger FIFO - strategien , det vil sige, at den information, der først bliver skrevet til kanalen, vil være den første, der bliver læst fra kanalen.

En vigtig forskel mellem et unavngivet rør og en fil er, at den læste information straks fjernes fra den og ikke kan læses igen. Udførelsen af ​​ovenstående systemkald kan sætte processen i en ventetilstand. Dette sker, hvis en proces forsøger at læse data fra et tomt rør eller skrive data til et fuldt rør. Processen vågner op, når der er data i kanalen, eller når der er ledig plads i kanalen.

Tovejskommunikation mellem processer kræver normalt to unavngivne rør.

Unavngivne rør i Unix

Systemkaldet bruges til at oprette et unavngivet rør pipe. En matrix med to heltal er outputparameteren for dette systemkald. Hvis opkaldet blev afsluttet normalt, så indeholder arrayet to filbeskrivelser: henholdsvis til at læse information fra kanalen og til at skrive til den. Når en proces afføder en anden proces, arves forælderens håndtag af barnet, og dermed etableres kommunikation mellem de to processer. En af dem bruger en skrivebeskyttet pipe, og den anden er skrivebeskyttet. Derfor, hvis data for eksempel skal overføres gennem et rør fra en overordnet proces til en underordnet proces, lukker den overordnede proces læsehåndtaget til røret umiddelbart efter at underordnet processen starter, og den underordnede proces lukker skrivehåndtaget for at røret. Hvis der er behov for tovejskommunikation, opretter moderprocessen to kanaler, hvoraf den ene bruges til at overføre data i den ene retning og den anden i den anden.

Et systemkald bruges til at skrive information til en kanal write. At læse information fra en kanal - et systemopkald read. Det første argument for disse opkald er en kanaldeskriptor af typen int, det andet er en pointer til det hukommelsesområde, som udvekslingen finder sted med, af typen void, det tredje er antallet af bytes, en heltalstype. Begge opkald returnerer antallet af overførte bytes (eller "-1" ved fejl). Når røret slutter, afgiver processen et systemkald close.

Unavngivne rør på Windows

Som mange andre kommunikationsmetoder mellem processer oprettes og konfigureres unavngivne rør ved hjælp af Windows API- funktioner . CreatePipebruges til at skabe et unavngivet rør. Denne funktion returnerer to deskriptorer (til henholdsvis læsning og skrivning til kanalen). For at en underordnet proces kan arve håndtag, skal den oprettes af en funktion CreateProcessmed arveflaget TRUE. Efter at have modtaget den nødvendige deskriptor, kan processen yderligere interagere med kanalen ved hjælp af funktionerne ReadFileog WriteFile, som henholdsvis giver læseinformation fra kanalen og skriveinformation til kanalen. Når du er færdig med kanalen, skal begge processer lukke håndtagene med CloseHandle.

Links