C Programmeerimine

Kuidas kasutada torufunktsiooni C-keeles

Kuidas kasutada torufunktsiooni C-keeles

Toru on protsesside vahelise suhtluse vahend. Üks protsess kirjutab andmeid torusse ja teine ​​protsess loeb torust andmeid. Selles artiklis näeme, kuidas funktsiooni pipe () kasutatakse kontseptsiooni rakendamiseks C-keele abil.

Pipe kohta

Torus hoitakse andmeid FIFO järjekorras, mis tähendab andmete järjestikku toru ühte otsa kirjutamist ja toru teise otsa andmete järjestikku lugemist.

Kui mõni protsess loeb torust, kuid ükski teine ​​protsess pole veel torusse kirjutatud, tagastab read faili lõpu. Kui protsess soovib torusse kirjutada, kuid toru jaoks pole lugemiseks muud protsessi kinnitatud, siis on see tõrge ja toru genereerib signaali SIGPIPE.

Päisefail

# kaasata

Süntaks

int toru (int filedes [2])

Argumendid

See funktsioon võtab ühe argumendi, kahe täisarvu massiivi (filedes). filedes [0] kasutatakse torust lugemiseks ja filedes [1] kasutatakse torusse kirjutamiseks. Torust välja lugeda sooviv protsess peaks sulguma filedes [1], ja protsess, mis soovib torusse kirjutada, peaks sulguma filedes [0].  Kui toru mittevajalikud otsad pole sõnaselgelt suletud, ei tagastata faili lõppu (EOF) kunagi.

Tagastage väärtused

Edu saavutamisel on toru () tagastab 0, rikke korral funktsioon -1.

Piltlikult saame esindada toru () toimivad järgmiselt:

Allpool on mõned näited, mis kirjeldavad torufunktsiooni kasutamist C-keeles.

Näide1

Selles näites näeme, kuidas toru funktsioon töötab. Kuigi toru kasutamine ühes protsessis ei ole eriti kasulik, kuid saame idee.

// Näide1.c
# kaasata
# kaasata
# kaasata
# kaasata
int main ()

int n;
int filedes [2];
söepuhver [1025];
char * message = "Tere, maailm!";
toru (filedes);
kirjutama (filedes [1], sõnum, strlen (sõnum));
kui ((n = loe (filedes [0], puhver, 1024))> = 0)
puhver [n] = 0; // stringi lõpetamine
printf ("loe torust% d baiti:"% s "\ n", n, puhver);

muud
perror ("loe");
väljumine (0);

Siin oleme kõigepealt loonud toru, kasutades toru () funktsioon kirjutatakse seejärel torule fildid [1] lõpp. Seejärel on andmed loetud toru teise otsa abil, mis on filedes [0]. Faili lugemiseks ja kirjutamiseks kasutasime loe () ja kirjutama () funktsioone.

Näide2

Selles näites näeme, kuidas vanema ja lapse protsessid toru abil suhtlevad.

// Näide2.c
# kaasata
# kaasata
# kaasata
# kaasata
# kaasata
int main ()

int filedes [2], nbaiti;
pid_t lastpid;
char string [] = "Tere, maailm!\ n ";
söelugeja [80];
toru (filedes);
kui (((lapsel = kahvel ()) == -1)

perror ("kahvel");
väljapääs (1);

kui (lapsepikk == 0)

sulge (filedes [0]); // Lapseprotsess ei vaja toru seda otsa
/ * Saada "string" toru väljundpoole kaudu * /
kirjutama (filedes [1], string, (strlen (string) +1));
väljumine (0);

muud

/ * Vanemprotsess sulgeb toru väljundpoole * /
sulge (filedes [1]); // Vanemprotsess ei vaja toru seda otsa
/ * Loe torust stringi * /
nbaiti = loetud (filedes [0], readbuffer, sizeof (readbuffer));
printf ("Loe string:% s", readbuffer);

tagasipöördumine (0);

Esiteks on torufunktsiooni abil loodud üks toru, seejärel on lapseprotsess hargnenud. Seejärel sulgeb lapseprotsess loetud otsa ja kirjutab torusse. Vanemprotsess sulgeb kirjutamise lõpu, loeb torust ja kuvab selle. Siin on andmevoog ainult üks viis lapselt vanemale.

Järeldus:

toru () on võimas süsteemikõne Linuxis. Selles artiklis oleme näinud ainult ühesuunalist andmevoogu, üks protsess kirjutab ja teine ​​protsess loeb, luues kaks toru, saame ka kahesuunalise andmevoo.

Microsoft Sculpt Touch juhtmeta hiirte ülevaade
Lugesin hiljuti Microsoft Sculpt Touch juhtmevaba hiir ja otsustas selle osta. Pärast mõnda aega kasutamist otsustasin jagada sellega oma kogemusi. Se...
Rakenduse AppyMouse ekraanipaneel ja hiirekursor Windowsi tahvelarvutitele
Tahvelarvutite kasutajad tunnevad hiirekursorit sageli puudust, eriti kui neil on kombeks sülearvuteid kasutada. Puutetundliku ekraaniga nutitelefonid...
Hiire keskmine nupp ei tööta Windows 10-s
The hiire keskmine nupp aitab teil sirvida pikki rohke andmega veebisaite ja ekraane. Kui see peatub, siis lõpuks kasutate kerimiseks klaviatuuri, mis...