Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
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.