Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy
počítačové znalosti >> Systémy >> unix >> .

Čo sa pomenuje a nemenovaná potrubia v Unixe?

V systémoch podobných UNIX sú potrubia mechanizmom medzisperálnej komunikácie (IPC). Umožňujú jednému procesu odosielať údaje do iného procesu. Existujú dva hlavné typy:pomenované potrubia (tiež nazývané FIFO) a nemenované potrubia (tiež nazývané anonymné potrubia).

nemenované potrubia (anonymné potrubia):

* stvorenie: Vytvorené pomocou systému `PIPE ()`. Toto volanie vytvára jednosmerné potrubie pozostávajúce z dvoch deskriptorov súborov:jedno na čítanie (`FD [0]`) a jedno na písanie (`FD [1]`).

* Prístup: Prístup k nemu má prístup iba proces, ktorý vytvoril potrubie. Existencia potrubia nie je známa mimo kontextu procesu tvorby. Typicky sa používa na komunikáciu medzi procesom rodiča a dieťaťa alebo medzi dvoma procesmi, ktoré sú výslovne prepojené.

* Lifetime: Potrubie existuje iba na životnosť procesov, ktoré ho používajú. Keď jeden z procesov uzavrie svoj koniec, potrubie sa automaticky zničí a akékoľvek ďalšie pokusy o čítanie alebo zápis zlyhajú.

* Príklad (s použitím `Fork ()` a `Pipe ()`):

`` C

#include

#include

#include

#include

int main () {

int Fd [2]; // deskriptory súborov pre potrubie

pid_t pid;

if (potrubie (fd) ==-1) {

Perror („potrubie zlyhalo“);

Výstup (1);

}

pid =vidlice ();

if (pid <0) {

Perror („Fork zlyhal“);

Výstup (1);

} else if (pid ==0) {// detský proces

Close (FD [1]); // Zatvorte koniec zápisu

Char Buffer [100];

read (FD [0], vyrovnávacia pamäť, sizeof (vyrovnávacia pamäť));

printf ("Dieťa prijaté:%s \ n", vyrovnávacia pamäť);

Close (FD [0]);

} else {// rodičovský proces

Close (FD [0]); // Zatvorte koniec čítania

const char* message ="ahoj od rodiča!";

Write (Fd [1], správa, strlen (správa) + 1); // +1 pre null Terminator

Close (FD [1]);

počkajte (null); // Počkajte, kým dieťa dokončí

}

návrat 0;

}

`` `

pomenované potrubia (fifos):

* stvorenie: Vytvorené pomocou systému `mkfifo ()`. Tým sa vytvorí súbor v súborovom systéme, ktorý predstavuje potrubie. Názov súboru pôsobí ako identifikátor potrubia.

* Prístup: Viaceré procesy majú prístup k pomenovanej potrubia. Akýkoľvek proces, ktorý pozná cestu potrubia, ju môže otvoriť na čítanie alebo písanie (hoci iba jeden proces môže písať súčasne, pokiaľ nepoužíva špeciálne konfigurácie). Prežívajú po celej životnosti procesov, ktoré ich používajú.

* Lifetime: Potrubie pretrváva v súborovom systéme, až kým sa výslovne odstráni pomocou „Unlink ()`.

* Príklad (pomocou dvoch samostatných programov komunikujúcich prostredníctvom pomenovaného potrubia):

Potrebovali by ste dva programy:jeden na napísanie FIFO a druhý, ktorý si z neho prečítal. `Mkfifo ()` sa nazýva raz (možno v nastavení skriptu) na vytvorenie FIFO, potom programy `open ()` FIFO na čítanie/zápis. Procesy musia zvládnuť chyby vrátane možnosti, že FIFO neexistuje, a chýb na `Open ()`.

Kľúčové rozdiely sú zhrnuté:

| Funkcia | Nemenované potrubie Pomenované potrubie (FIFO)

| --------------- | ---------------------------------- | --------------------------- |

| Tvorba `Pipe ()` | `mkfifo ()` |

| Prístup Iba proces vytvárania Viaceré procesy

| Perzistencia Existuje iba počas životnosti procesu Pretrváva v súborovom systéme

| Interprocess Zvyčajne rodič-dieťa alebo explicitne pripojené procesy Môže pripojiť nesúvisiace procesy

| Zadanie súborového systému Nie | Áno |

Pomenované potrubia sú flexibilnejšie pre komunikáciu medzi nesúvisiacimi procesmi, zatiaľ čo nemenované potrubia sú jednoduchšie a efektívnejšie pre komunikáciu medzi úzko súvisiacimi procesmi, ako je rodič a jeho dieťa. Výber závisí od konkrétnych komunikačných potrieb vašej aplikácie.

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené