C Programmering

Sådan bruges rørfunktion på C-sprog

Sådan bruges rørfunktion på C-sprog

Et rør er et medium til kommunikation mellem processer. En proces skriver data til røret, og en anden proces læser data fra røret. I denne artikel vil vi se, hvordan funktionen pipe () bruges til at implementere konceptet ved hjælp af C-sprog.

Om rør

I røret opretholdes dataene i en FIFO-rækkefølge, hvilket betyder at skrive data til den ene ende af røret sekventielt og læse data fra en anden ende af røret i samme rækkefølge.

Hvis nogen proces læser fra røret, men ingen anden proces ikke er skrevet til røret endnu, så læser returnerer slutningen af ​​filen. Hvis en proces ønsker at skrive til et rør, men der ikke er nogen anden proces knyttet til røret til aflæsning, er dette en fejltilstand, og røret genererer et SIGPIPE-signal.

Sidehovedfil

#omfatte

Syntaks

int pipe (int filedes [2])

Argumenter

Denne funktion tager et enkelt argument, en matrix med to heltal (arkiverer). arkiverer [0] bruges til aflæsning fra røret, og arkiverer [1] bruges til at skrive til røret. Processen, der ønsker at læse fra røret, skal lukke arkiverer [1], og processen, der ønsker at skrive til røret, skal lukke arkiverer [0].  Hvis de unødvendige ender af røret ikke er eksplicit lukket, returneres end-of-file (EOF) aldrig.

Returner værdier

På succes, den rør() returnerer 0, for fejl returnerer funktionen -1.

Billedmæssigt kan vi repræsentere rør() fungerer som følger:

Nedenfor er et par eksempler, der viser, hvordan man bruger rørfunktionen på C-sprog.

Eksempel 1

I dette eksempel vil vi se, hvordan rørfunktionen fungerer. Selvom det ikke er meget nyttigt at bruge et rør i en enkelt proces, men vi får en idé.

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

int n;
int filedes [2];
char-buffer [1025];
char * message = "Hej verden!";
rør (filedes);
skriv (arkiverer [1], besked, strlen (besked));
hvis ((n = læst (arkiverer [0], buffer, 1024))> = 0)
buffer [n] = 0; // afslutte strengen
printf ("læs% d bytes fra røret:"% s "\ n", n, buffer);

andet
perror ("læs");
exit (0);

Her har vi først oprettet et rør ved hjælp af rør() funktion derefter skrevet til røret ved hjælp af filder [1] ende. Derefter er dataene læst ved hjælp af den anden ende af røret, hvilket er arkiverer [0]. Vi plejede at læse og skrive til filen Læs() og skrive() funktioner.

Eksempel 2

I dette eksempel vil vi se, hvordan forældre- og barnprocesser kommunikerer ved hjælp af røret.

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

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

perror ("gaffel");
udgang (1);

hvis (childpid == 0)

close (filedes [0]); // Child-proces behøver ikke denne ende af røret
/ * Send "streng" gennem udgangssiden af ​​røret * /
skriv (arkiverer [1], streng, (strlen (streng) +1));
exit (0);

andet

/ * Overordnet proces lukker udgangssiden af ​​røret * /
close (filedes [1]); // Forældreprocessen behøver ikke denne ende af røret
/ * Læs i en streng fra røret * /
nbytes = read (filedes [0], readbuffer, sizeof (readbuffer));
printf ("Læs streng:% s", readbuffer);

retur (0);

Først er der oprettet et rør ved hjælp af rørfunktion, hvorefter en underordnet proces er blevet forked. Derefter lukker barneprocessen den læste ende og skriver til røret. Den overordnede proces lukker skriveenden og læser fra røret og viser den. Her er datastrøm kun en måde, der går fra barn til forælder.

Konklusion:

rør() er et kraftfuldt systemopkald i Linux. I denne artikel har vi kun set envejs datastrøm, en proces skriver, og en anden proces læser, hvilket skaber to rør, vi kan også opnå tovejs dataflytning.

Mus Top 5 ergonomiske computermusprodukter til Linux
Top 5 ergonomiske computermusprodukter til Linux
Forårsager langvarig brug af computeren smerter i dit håndled eller fingre? Lider du af stive led og er konstant nødt til at ryste hænderne? Føler du ...
Mus Sådan ændres mus og touchpad-indstillinger ved hjælp af Xinput i Linux
Sådan ændres mus og touchpad-indstillinger ved hjælp af Xinput i Linux
De fleste Linux-distributioner leveres som standard med "libinput" -biblioteket til at håndtere inputhændelser på et system. Det kan behandle inputhæn...
Mus Remap dine museknapper forskelligt til anden software med X-Mouse Button Control
Remap dine museknapper forskelligt til anden software med X-Mouse Button Control
Måske har du brug for et værktøj, der kan ændre din muses kontrol med hver applikation, du bruger. Hvis dette er tilfældet, kan du prøve en applikatio...