C Programovanie

Ako používať funkciu potrubia v jazyku C

Ako používať funkciu potrubia v jazyku C

Rúrka je médium na komunikáciu medzi procesmi. Jeden proces zapisuje údaje do kanálu a druhý proces číta dáta z kanálu. V tomto článku uvidíme, ako sa funkcia pipe () používa na implementáciu konceptu pomocou jazyka C.

O spoločnosti Pipe

V kanáli sa údaje udržiavajú v poradí FIFO, čo znamená postupné zapisovanie údajov na jeden koniec potrubia a čítanie údajov z druhého konca potrubia v rovnakom poradí.

Ak niektorý proces číta z informačného kanála, ale žiadny iný proces ešte nenapísal do informačného kanála, potom príkaz read vráti koniec súboru. Ak chce proces zapisovať do kanálu, ale k kanálu nie je pripojený žiadny ďalší proces na čítanie, potom ide o chybový stav a kanál generuje signál SIGPIPE.

Hlavičkový súbor

#include

Syntax

int fajka (int podklady [2])

Argumenty

Táto funkcia má jediný argument, pole dvoch celých čísel (kartotéky). kartotéky [0] sa používa na čítanie z potrubia a kartotéky [1] sa používa na zápis do fajky. Proces, ktorý chce čítať z kanálu, by sa mal ukončiť kartotéky [1], a proces, ktorý chce zapisovať do kanálu, by sa mal ukončiť kartotéky [0].  Ak nepotrebné konce potrubia nie sú výslovne uzavreté, koniec súboru (EOF) sa nikdy nevráti.

Vrátiť hodnoty

O úspechu rúra() vráti 0, pri zlyhaní funkcia vráti -1.

Obrázkovo môžeme reprezentovať rúra() fungujú nasledovne:

Ďalej uvádzame niekoľko príkladov, ako používať funkciu pipe v jazyku C.

Príklad 1

V tomto príklade uvidíme, ako funguje funkcia pipe. Aj keď použitie potrubia v jednom procese nie je veľmi užitočné, dostaneme nápad.

// Príklad1.c
#include
#include
#include
#include
int main ()

int n;
int kartotéky [2];
zuhoľnatý pufor [1025];
char * message = "Dobrý deň, svet!";
fajka (pilníky);
zapis (podklady [1], sprava, strlen (sprava));
if ((n = čítať (súbory [0], vyrovnávacia pamäť, 1024))> = 0)
vyrovnávacia pamäť [n] = 0; // ukončí reťazec
printf ("načítať% d bajtov z kanálu:"% s "\ n", n, vyrovnávacia pamäť);

inak
perror ("prečítať");
výstup (0);

Tu sme najskôr vytvorili potrubie pomocou rúra() funkcia potom zapísaná do kanálu pomocou fildes [1] koniec. Potom sa údaje načítali pomocou druhého konca potrubia, čo je kartotéky [0]. Na čítanie a zápis do súboru sme zvykli čítať() a napíš () funkcie.

Príklad 2

V tomto príklade uvidíme, ako nadradené a podradené procesy komunikujú pomocou potrubia.

// Príklad2.c
#include
#include
#include
#include
#include
int main ()

int priečinky [2], nbytov;
pid_t childpid;
char string [] = "Dobrý deň, svet!\ n ";
char readbuffer [80];
fajka (pilníky);
if ((childpid = fork ()) == -1)

perror („vidlička“);
výstup (1);

if (childpid == 0)

close (folderses [0]); // Podradený proces tento koniec kanálu nepotrebuje
/ * Pošlite „reťazec“ cez výstupnú stranu potrubia * /
zapis (podklady [1], retazec, (strlen (retazec) +1));
výstup (0);

inak

/ * Nadradený proces uzatvára výstupnú stranu potrubia * /
close (folderses [1]); // Rodičovský proces tento koniec kanálu nepotrebuje
/ * Čítať v reťazci z fajky * /
nbytes = prečítané (súbory [0], readbuffer, sizeof (readbuffer));
printf ("Čítaný reťazec:% s", readbuffer);

návrat (0);

Najskôr sa pomocou funkcie potrubia vytvorilo jedno potrubie, potom sa rozvetvil podradený proces. Potom podradený proces uzavrie načítaný koniec a zapíše do kanálu. Nadradený proces uzavrie koniec zápisu a číta z kanálu a zobrazuje ho. Tu je tok údajov iba jedným spôsobom, ktorý je z dieťaťa na rodiča.

Záver:

rúra() je silné systémové volanie v systéme Linux. V tomto článku sme videli iba jednosmerný dátový tok, jeden proces zapisuje a druhý číta, čím sa vytvárajú dva kanály, pomocou ktorých môžeme dosiahnuť obojsmerný dátový tok.

Top 5 ergonomických produktov pre počítačové myši pre Linux
Spôsobuje dlhodobé používanie počítača bolesť zápästia alebo prstov? Trpíte stuhnutými kĺbmi a neustále si musíte podávať ruky? Cítite pálivú bolesť z...
Ako zmeniť nastavenie myši a touchpadu pomocou systému Xinput v systéme Linux
Väčšina distribúcií systému Linux sa štandardne dodáva s knižnicou „libinput“ na spracovanie vstupných udalostí v systéme. Dokáže spracovať vstupné ud...
S ovládaním pomocou myši X-Mouse môžete tlačidlá myši premapovať odlišne pre iný softvér
Možno budete potrebovať nástroj, ktorý by mohol zmeniť ovládanie myši pri každej aplikácii, ktorú používate. Ak je to váš prípad, môžete vyskúšať apli...