C Programiranje

Kako se koristi funkcija cijevi u jeziku C

Kako se koristi funkcija cijevi u jeziku C

Lula je medij za komunikaciju između procesa. Jedan postupak zapisuje podatke u cijev, a drugi postupak čita podatke iz cijevi. U ovom ćemo članku vidjeti kako se funkcija pipe () koristi za provedbu koncepta pomoću jezika C.

O cijevi

U cijevi se podaci održavaju u FIFO redoslijedu, što znači sekvencijalno upisivanje podataka na jedan kraj cijevi i čitanje podataka s drugog kraja cijevi istim sekvencijalnim redoslijedom.

Ako bilo koji postupak čita iz cijevi, ali niti jedan drugi postupak još nije upisao u cijev, tada read vraća kraj datoteke. Ako postupak želi upisati u cijev, ali na cijev nije priključen nijedan drugi postupak za čitanje, to je uvjet pogreške i cijev generira SIGPIPE signal.

Datoteka zaglavlja

#include

Sintaksa

cijev int (int datoteke (2))

Argumenti

Ova funkcija uzima jedan argument, niz od dvije cijele brojke (polja). polja [0] koristi se za očitavanje iz cijevi, i polja [1] koristi se za upisivanje u cijev. Postupak koji želi čitati iz cijevi trebao bi se zatvoriti polja [1], a postupak koji želi upisati u cijev trebao bi se zatvoriti polja [0].  Ako nepotrebni krajevi cijevi nisu izričito zatvoreni, kraj datoteke (EOF) nikada se neće vratiti.

Vrati vrijednosti

O uspjehu, cijev() vraća 0, u slučaju neuspjeha funkcija vraća -1.

Slikovito možemo predstaviti cijev() funkcioniraju na sljedeći način:

Ispod je nekoliko primjera koji prikazuju kako koristiti funkciju pipe u jeziku C.

Primjer1

U ovom ćemo primjeru vidjeti kako funkcionira funkcija cijevi. Iako korištenje cijevi u jednom procesu nije jako korisno, ali dobit ćemo ideju.

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

int n;
int podneseni [2];
pufer za char [1025];
char * message = "Zdravo, World!";
cijev (filca);
pisanje (polja (1), poruka, strlen (poruka));
if ((n = čitanje (polja (0), međuspremnik, 1024))> = 0)
međuspremnik [n] = 0; // završava niz
printf ("pročitati% d bajta iz cijevi:"% s "\ n", n, međuspremnik);

drugo
perror ("čitati");
izlaz (0);

Ovdje smo prvo stvorili cijev pomoću cijev() funkcija koja se zatim zapisuje u cijev pomoću fildes [1] kraj. Zatim su podaci pročitani s drugog kraja cijevi, što je polja [0]. Nekad smo čitali i pisali u datoteku čitati() i pisati() funkcije.

Primjer2

U ovom ćemo primjeru vidjeti kako roditeljski i podređeni procesi komuniciraju pomoću cijevi.

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

int datoteke, [2], nbajta;
pid_t dijete;
char string [] = "Zdravo, svijete!\ n ";
char readbuffer [80];
cijev (filca);
if ((childpid = fork ()) == -1)

perror ("vilica");
izlaz (1);

ako (childpid == 0)

close (сервер [0]); // Podređenom procesu ovaj kraj cijevi nije potreban
/ * Pošaljite "niz" kroz izlaznu stranu cijevi * /
zapisivanje (polja [1], niz, (strlen (niz) +1));
izlaz (0);

drugo

/ * Nadređeni postupak zatvara izlaznu stranu cijevi * /
close (сервер [1]); // Matičnom procesu ovaj kraj cijevi nije potreban
/ * Očitati u nizu iz cijevi * /
nbytes = čitano (datoteke, [0], spremnik za čitanje, veličina (spremnik za čitanje));
printf ("Čitanje niza:% s", međuspremnik);

povratak (0);

Prvo je stvorena jedna cijev pomoću funkcije cijevi, a potom je podrezan proces. Zatim, podređeni proces zatvara kraj čitanja i piše u cijev. Nadređeni postupak zatvara kraj pisanja i čita iz cijevi i prikazuje ga. Ovdje je protok podataka samo jedan način od djeteta do roditelja.

Zaključak:

cijev() je moćan sistemski poziv u Linuxu. U ovom smo članku vidjeli samo jednosmjerni tok podataka, jedan proces zapisuje, a drugi čita, stvarajući dvije cijevi kojima također možemo postići dvosmjerni protok podataka.

Kako prikazati brojač FPS-a u Linux igrama
Linux gaming dobio je velik poticaj kada je Valve najavio Linux podršku za Steam klijent i njihove igre 2012. godine. Od tada su mnoge AAA i indie igr...
Kako preuzeti i igrati Sid Meier's Civilization VI na Linuxu
Uvod u igru Civilization 6 moderan je pogled na klasični koncept predstavljen u seriji igara Age of Empires. Ideja je bila prilično jednostavna; započ...
Kako instalirati i igrati Doom na Linuxu
Uvod u Doom Serija Doom nastala je 90-ih nakon izlaska originalnog Dooma. To je bio trenutni hit i od tog vremena nadalje igraća serija dobila je broj...