C Programování

Jak používat funkci potrubí v jazyce C

Jak používat funkci potrubí v jazyce C

Trubka je médium pro komunikaci mezi procesy. Jeden proces zapisuje data do kanálu a jiný proces čte data z kanálu. V tomto článku uvidíme, jak se funkce pipe () používá k implementaci konceptu pomocí jazyka C.

O společnosti Pipe

V kanálu se data udržují v pořadí FIFO, což znamená postupné zapisování dat na jeden konec kanálu a čtení dat z jiného konce kanálu ve stejném pořadí.

Pokud jakýkoli proces čte z kanálu, ale žádný jiný proces ještě do kanálu nenapsal, pak read vrátí konec souboru. Pokud chce proces zapisovat do kanálu, ale k kanálu není připojen žádný jiný proces pro čtení, pak se jedná o chybový stav a kanál generuje signál SIGPIPE.

Soubor záhlaví

#zahrnout

Syntax

int potrubí (int pilníky [2])

Argumenty

Tato funkce přebírá jediný argument, pole dvou celých čísel (kartotéky). kartotéky [0] se používá ke čtení z kanálu a kartotéky [1] se používá pro zápis do kanálu. Proces, který chce číst z kanálu, by se měl zavřít kartotéky [1], a proces, který chce zapisovat do kanálu, by se měl zavřít kartotéky [0].  Pokud zbytečné konce kanálu nejsou výslovně uzavřeny, pak se konec souboru (EOF) nikdy nevrátí.

Návratové hodnoty

O úspěchu trubka() vrací 0, při selhání funkce vrací -1.

Obrazově můžeme představovat trubka() funkce takto:

Níže uvádíme několik příkladů, jak používat funkci potrubí v jazyce C.

Příklad 1

V tomto příkladu uvidíme, jak funguje funkce potrubí. Ačkoli použití potrubí v jediném procesu není příliš užitečné, získáme představu.

// Příklad 1.C
#zahrnout
#zahrnout
#zahrnout
#zahrnout
int main ()

int n;
int pilníky [2];
char buffer [1025];
char * message = "Dobrý den, svět!";
trubka (pilníky);
write (folders [1], message, strlen (message));
if ((n = čtení (folders [0], buffer, 1024))> = 0)
vyrovnávací paměť [n] = 0; // ukončí řetězec
printf ("načíst% d bajtů z kanálu:"% s "\ n", n, vyrovnávací paměť);

jiný
perror ("číst");
exit (0);

Zde jsme nejprve vytvořili potrubí pomocí trubka() funkce pak zapsána do kanálu pomocí fildes [1] konec. Poté byla data načtena pomocí druhého konce kanálu, což je kartotéky [0]. Pro čtení a zápis do souboru jsme zvyklí číst() a napsat() funkce.

Příklad 2

V tomto příkladu uvidíme, jak nadřazené a podřízené procesy komunikují pomocí kanálu.

// Příklad 2.C
#zahrnout
#zahrnout
#zahrnout
#zahrnout
#zahrnout
int main ()

int folders [2], nbytes;
pid_t childpid;
char string [] = "Dobrý den, svět!\ n ";
char readbuffer [80];
trubka (pilníky);
if ((childpid = fork ()) == -1)

perror ("vidlice");
výstup (1);

if (childpid == 0)

close (folderses [0]); // Podřízený proces tento konec kanálu nepotřebuje
/ * Odeslat "řetězec" výstupní stranou potrubí * /
write (folders [1], string, (strlen (string) +1));
exit (0);

jiný

/ * Nadřazený proces uzavírá výstupní stranu potrubí * /
close (folderses [1]); // Rodičovský proces tento konec kanálu nepotřebuje
/ * Číst v řetězci z kanálu * /
nbytes = read (folders [0], readbuffer, sizeof (readbuffer));
printf ("Číst řetězec:% s", readbuffer);

návrat (0);

Nejprve byla vytvořena jedna roura pomocí funkce roury, poté byl rozvětven podřízený proces. Potom podřízený proces zavře konec čtení a zapíše do kanálu. Nadřazený proces zavře konec zápisu a načte z kanálu a zobrazí jej. Tok dat je pouze jedním způsobem, který je od dítěte k rodiči.

Závěr:

trubka() je silné systémové volání v Linuxu. V tomto článku jsme viděli pouze jednosměrný datový tok, jeden proces zapisuje a další proces čte, čímž vznikají dva kanály, které můžeme dosáhnout také obousměrný datový tok.

Přemapujte tlačítka myši odlišně pro jiný software pomocí ovládání myší X-Mouse
Možná potřebujete nástroj, který by mohl změnit ovládání myši u každé aplikace, kterou používáte. V takovém případě můžete vyzkoušet aplikaci s názvem...
Recenze bezdrátové myši Microsoft Sculpt Touch
Nedávno jsem četl o Microsoft Sculpt Touch bezdrátová myš a rozhodl se ji koupit. Po chvíli používání jsem se rozhodl se s ním podělit o své zkušenost...
Trackpad a ukazatel myši AppyMouse na obrazovce pro tablety Windows
Uživatelé tabletů často postrádají ukazatel myši, zejména když obvykle používají notebooky. Dotykové smartphony a tablety mají mnoho výhod a jediným o...