C Programiranje

Kako uporabljati funkcijo pipe v jeziku C

Kako uporabljati funkcijo pipe v jeziku C

Cev je medij za komunikacijo med procesi. En postopek zapisuje podatke v cev, drugi postopek pa podatke iz cevi. V tem članku bomo videli, kako se funkcija pipe () uporablja za izvajanje koncepta v jeziku C.

O cevi

V cevi se podatki vzdržujejo v vrstnem redu FIFO, kar pomeni zaporedno zapisovanje podatkov na en konec cevi in ​​branje podatkov z drugega konca cevi v enakem zaporednem vrstnem redu.

Če kateri koli postopek bere iz cevi, vendar noben drug postopek še ni zapisal v cev, potem branje vrne konec datoteke. Če želi postopek zapisati v cev, vendar na cev ni pripet drug postopek za branje, je to stanje napake in cev generira signal SIGPIPE.

Datoteka glave

#include

Sintaksa

cev int (datoteke int [2])

Argumenti

Ta funkcija sprejme en argument, matriko dveh celih števil (vložniki). vložniki [0] se uporablja za odčitavanje iz cevi in vložniki [1] se uporablja za zapisovanje v cev. Proces, ki ga želimo brati iz cevi, bi se moral zaključiti vložniki [1], in postopek, ki želi zapisovati v cev, bi se moral zaključiti vložniki [0].  Če nepotrebni konci cevi niso izrecno zaprti, konec datoteke (EOF) ne bo nikoli vrnjen.

Vrnite vrednosti

O uspehu, cev () vrne 0, v primeru okvare funkcija vrne -1.

Slikovno lahko predstavljamo cev () deluje na naslednji način:

Spodaj je nekaj primerov, ki prikazujejo, kako uporabljati funkcijo pipe v jeziku C.

Primer1

V tem primeru bomo videli, kako deluje funkcija cevi. Čeprav uporaba cevi v enem samem postopku ni zelo koristna, bomo pa dobili idejo.

// Primer1.c
#include
#include
#include
#include
int main ()

int n;
int vložniki [2];
medpomnilnik char [1025];
char * message = "Pozdravljen, svet!";
cev (vložki);
pisanje (polja [1], sporočilo, strlen (sporočilo));
če ((n = prebrano (vložene datoteke [0], medpomnilnik, 1024))> = 0)
medpomnilnik [n] = 0; // zaključi niz
printf ("preberi% d bajtov iz cevi:"% s "\ n", n, medpomnilnik);

drugače
perror ("branje");
izhod (0);

Tu smo najprej ustvarili cev z uporabo cev () funkcija, ki je nato zapisana v cev z uporabo fildes [1] konec. Nato so bili podatki prebrani z drugim koncem cevi, kar je vložniki [0]. Včasih smo brali in pisali v datoteko preberi () in piši () funkcije.

Primer2

V tem primeru bomo videli, kako nadrejeni in podrejeni procesi komunicirajo s pomočjo cevi.

// Primer2.c
#include
#include
#include
#include
#include
int main ()

int datoteke [2], nbajtov;
pid_t otrok;
char string [] = "Pozdravljen, svet!\ n ";
char bralnik [80];
cev (vložki);
če ((childpid = fork ()) == -1)

perror ("vilice");
izhod (1);

če (Childpid == 0)

close (filedes [0]); // Podrejeni postopek ne potrebuje tega konca cevi
/ * Pošlji "niz" skozi izhodno stran cevi * /
pisanje (polja [1], niz, (strlen (niz) +1));
izhod (0);

drugače

/ * Nadrejeni postopek zapre izhodno stran cevi * /
close (filedes [1]); // Nadrejeni postopek ne potrebuje tega konca cevi
/ * Preberi v niz iz cevi * /
nbajtov = prebrano (vloženi elementi [0], medpomnilnik, velikost (bralnik));
printf ("Preberi niz:% s", medpomnilnik);

vrnitev (0);

Najprej je bila ustvarjena ena cev s funkcijo cevi, nato pa je podrejen proces. Nato podrejeni postopek zapre konec branja in zapiše v cev. Nadrejeni postopek zapre konec pisanja, bere iz cevi in ​​ga prikaže. Tukaj je pretok podatkov le en način, od otroka do starša.

Zaključek:

cev () je močan sistemski klic v Linuxu. V tem članku smo videli samo enosmerni pretok podatkov, en postopek zapisuje, drugi postopek pa bere in ustvarja dve cevi, s katerimi lahko dosežemo tudi dvosmerni tok.

Vadnica za bitko za Wesnoth
Bitka za Wesnoth je ena izmed najbolj priljubljenih odprtokodnih strateških iger, ki jih lahko trenutno igrate. Ne samo, da se ta igra razvija že zelo...
0 A.D. Vadnica
Od številnih strateških iger tam 0 A.D. uspe izstopati kot izčrpen naslov in zelo globoka, taktična igra, čeprav je odprtokodna. Razvoj igre deluje ze...
Vadnica za Unity3D
Uvod v Unity 3D Unity 3D je močan motor za razvoj iger. Navzkrižna platforma vam omogoča ustvarjanje iger za mobilne naprave, splet, namizje in konzol...