C Programmering

Hvordan bruke pipefunksjon på C-språk

Hvordan bruke pipefunksjon på C-språk

Et rør er et medium for kommunikasjon mellom prosesser. En prosess skriver data til røret, og en annen prosess leser data fra røret. I denne artikkelen vil vi se hvordan pipen () -funksjonen brukes til å implementere konseptet ved hjelp av C-språk.

Om Pipe

I røret opprettholdes dataene i en FIFO-rekkefølge, som betyr å skrive data til den ene enden av røret sekvensielt og lese data fra en annen ende av røret i samme sekvensiell rekkefølge.

Hvis noen prosesser leses fra røret, men ingen annen prosess ikke har skrevet til røret ennå, så les returnerer slutten av filen. Hvis en prosess vil skrive til et rør, men det ikke er noen annen prosess festet til røret for avlesning, er dette en feiltilstand, og røret genererer et SIGPIPE-signal.

Topptekstfil

#inkludere

Syntaks

int pipe (int arkiverer [2])

Argumenter

Denne funksjonen tar et enkelt argument, en matrise med to heltall (arkiverer). arkiverer [0] brukes til å lese fra røret, og arkiverer [1] brukes til å skrive til røret. Prosessen som vil lese fra røret, bør lukkes arkiverer [1], og prosessen som ønsker å skrive til røret skal lukkes arkiverer [0].  Hvis unødvendige ender av røret ikke er eksplisitt lukket, vil slutten av filen (EOF) aldri bli returnert.

Returner verdier

På suksess, den rør() returnerer 0, for feil returnerer funksjonen -1.

Bildemessig kan vi representere rør() fungerer som følger:

Nedenfor er noen eksempler som viser hvordan du bruker rørfunksjonen på C-språk.

Eksempel 1

I dette eksemplet vil vi se hvordan rørfunksjonen fungerer. Selv om det ikke er veldig nyttig å bruke et rør i en enkelt prosess, men vi får en ide.

// Eksempel1.c
#inkludere
#inkludere
#inkludere
#inkludere
int main ()

int n;
int arkiverer [2];
røyebuffer [1025];
char * message = "Hei verden!";
pipe (filedes);
skrive (arkiverer [1], melding, strlen (melding));
hvis ((n = lese (arkiverer [0], buffer, 1024))> = 0)
buffer [n] = 0; // avslutte strengen
printf ("les% d byte fra røret:"% s "\ n", n, buffer);

ellers
perror ("lese");
exit (0);

Her har vi først laget et rør ved hjelp av rør() funksjonen deretter skrevet til røret ved hjelp av filder [1] slutt. Deretter har dataene blitt lest ved hjelp av den andre enden av røret, som er arkiverer [0]. For å lese og skrive til filen pleide vi å lese() og skrive() funksjoner.

Eksempel 2

I dette eksemplet vil vi se hvordan foreldre- og barneprosesser kommuniserer ved hjelp av røret.

// Eksempel2.c
#inkludere
#inkludere
#inkludere
#inkludere
#inkludere
int main ()

int filedes [2], nbytes;
pid_t barnepid;
char string [] = "Hei verden!\ n ";
char readbuffer [80];
pipe (filedes);
hvis ((childpid = fork ()) == -1)

perror ("gaffel");
utgang (1);

hvis (childpid == 0)

close (arkiverer [0]); // Child-prosessen trenger ikke denne enden av røret
/ * Send "streng" gjennom utgangssiden av røret * /
skriv (arkiverer [1], streng, (strlen (streng) +1));
exit (0);

ellers

/ * Overordnet prosess lukker utgangssiden av røret * /
close (filedes [1]); // Foreldreprosessen trenger ikke denne enden av røret
/ * Les i en streng fra røret * /
nbytes = read (filedes [0], readbuffer, sizeof (readbuffer));
printf ("Les streng:% s", readbuffer);

retur (0);

Først er ett rør opprettet ved hjelp av rørfunksjon, og deretter har en underordnet prosess blitt forked. Deretter lukker barneprosessen avlesningen og skriver til røret. Foreldreprosessen lukker skriveenden og leser fra røret og viser den. Her er dataflyt bare en måte som er fra barn til foreldre.

Konklusjon:

rør() er en kraftig systemanrop i Linux. I denne artikkelen har vi sett bare enveis dataflyt, en prosess skriver, og en annen prosess leser, og skaper to rør vi kan oppnå toveis dataflyt også.

Mus Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Dual Display Mouse Manager lar deg kontrollere og konfigurere musebevegelse mellom flere skjermer, ved å bremse bevegelsene nær grensen. Windows 10/8,...
Mus WinMouse lar deg tilpasse og forbedre musemarkørenes bevegelse på Windows PC
WinMouse lar deg tilpasse og forbedre musemarkørenes bevegelse på Windows PC
Hvis du vil forbedre standardfunksjonene til musepekeren, bruk freeware WinMouse. Det legger til flere funksjoner som hjelper deg å få mest mulig ut a...
Mus Mus venstreklikknapp fungerer ikke på Windows 10
Mus venstreklikknapp fungerer ikke på Windows 10
Hvis du bruker en dedikert mus med den bærbare eller stasjonære datamaskinen, men museklikk-knappen fungerer ikke på Windows 10/8/7 av en eller annen ...