C Programmēšana

Kā izmantot cauruļu funkciju C valodā

Kā izmantot cauruļu funkciju C valodā

Caurule ir saziņas līdzeklis starp procesiem. Viens process ieraksta datus caurulē, bet cits process nolasa datus no caurules. Šajā rakstā mēs redzēsim, kā funkcija pipe () tiek izmantota, lai realizētu koncepciju, izmantojot C valodu.

Par Pipe

Caurulē dati tiek uzturēti FIFO secībā, kas nozīmē secīgu datu ierakstīšanu vienā caurules galā un datu nolasīšanu no cita caurules gala tādā pašā secīgā secībā.

Ja kāds process tiek lasīts no caurules, bet neviens cits process vēl nav ierakstīts caurulē, tad lasīšana atgriež faila beigas. Ja process vēlas ierakstīt caurulē, bet lasīšanai nav pievienots cits process, kas ir pievienots caurulei, tas ir kļūdas stāvoklis, un caurule ģenerē SIGPIPE signālu.

Galvenes fails

# iekļaut

Sintakse

int caurule (int filedes [2])

Argumenti

Šai funkcijai ir nepieciešams viens arguments, divu veselu skaitļu masīvs (filedes). filedes [0] tiek izmantots lasīšanai no caurules, un filedes [1] tiek izmantots, lai rakstītu uz pīpi. Procesam, kuru vēlas nolasīt no caurules, vajadzētu beigties filedes [1], un process, kas vēlas rakstīt uz caurules, ir jāaizver filedes [0].  Ja nevajadzīgie caurules gali nav skaidri aizvērti, faila beigas (EOF) nekad netiks atgrieztas.

Atgriezties vērtības

Pēc panākumiem caurule () atgriež 0, par neveiksmi funkcija atgriež -1.

Attēlā mēs varam attēlot caurule () darbojas šādi:

Zemāk ir daži piemēri, kas attēlo, kā izmantot cauruļu funkciju C valodā.

1. piemērs

Šajā piemērā mēs redzēsim, kā darbojas caurules funkcija. Lai gan caurules izmantošana vienā procesā nav ļoti noderīga, taču mēs iegūsim ideju.

// Piemērs1.c
# iekļaut
# iekļaut
# iekļaut
# iekļaut
int main ()

int n;
int filedes [2];
char buferis [1025];
char * message = "Sveika, pasaule!";
caurule (filedes);
rakstīt (filedes [1], ziņa, strlen (ziņa));
ja ((n = lasīt (filedes [0], buferis, 1024))> = 0)
buferis [n] = 0; // izbeigt virkni
printf ("lasīt% d baitus no caurules:"% s "\ n", n, buferis);

cits
perror ("lasīt");
izeja (0);

Šeit mēs vispirms esam izveidojuši cauruli, izmantojot caurule () funkcija pēc tam tiek ierakstīta caurulē, izmantojot fildes [1] beigas. Pēc tam dati ir nolasīti, izmantojot caurules otru galu, kas ir filedes [0]. Lai lasītu un rakstītu failā, mēs to izmantojām lasīt () un rakstīt () funkcijas.

2. piemērs

Šajā piemērā mēs redzēsim, kā vecāku un bērnu procesi sazinās, izmantojot cauruli.

// Piemērs2.c
# iekļaut
# iekļaut
# iekļaut
# iekļaut
# iekļaut
int main ()

int filedes [2], nbaiti;
pid_t childpid;
char string [] = "Sveika, pasaule!\ n ";
char readbuffer [80];
caurule (filedes);
ja (((bērns = dakša ()) == -1)

perror ("dakša");
izeja (1);

ja (childpid == 0)

aizvērt (filedes [0]); // Bērna procesam šis caurules gals nav vajadzīgs
/ * Nosūtiet "virkni" caurules izejas pusē * /
rakstīt (filedes [1], virkne, (strlen (virkne) +1));
izeja (0);

cits

/ * Vecāku process aizver caurules izejas pusi * /
aizvērt (filedes [1]); // Vecākajam procesam šis caurules gals nav vajadzīgs
/ * Lasiet virknē no caurules * /
nbaiti = lasīt (filedes [0], readbuffer, sizeof (readbuffer));
printf ("Lasīt virkni:% s", lasīšanas buferis);

atgriešanās (0);

Pirmkārt, izmantojot caurules funkciju, ir izveidota viena caurule, pēc tam ir izveidots bērna process. Pēc tam bērna process aizver lasīšanas galu un raksta caurulē. Vecāku process aizver rakstīšanas beigas, nolasa no caurules un parāda to. Datu plūsma šeit ir tikai viens no bērna vecākiem.

Secinājums:

caurule () ir spēcīgs sistēmas izsaukums Linux. Šajā rakstā mēs esam redzējuši tikai vienvirziena datu plūsmu, viens process raksta un cits process skan, izveidojot divas caurules, mēs varam sasniegt arī divvirzienu datu plūsmu.

Instalējiet jaunāko Dolphin emulatoru Gamecube un Wii operētājsistēmai Linux
Delfīnu emulators ļauj jums spēlēt izvēlētās Gamecube un Wii spēles Linux personālajos datoros (PC). Tā kā Dolphin Emulator ir brīvi pieejams un atvē...
Kā lietot GameConqueror Cheat Engine Linux
Rakstā ir sniegts ceļvedis par GameConqueror apkrāptu dzinēja izmantošanu Linux. Daudzi lietotāji, kas spēlē spēles operētājsistēmā Windows, bieži izm...
Labākie Linux spēļu konsoles emulatori
Šajā rakstā tiks uzskaitīta populārā Linux spēļu konsoles atdarināšanas programmatūra. Emulācija ir programmatūras saderības slānis, kas atdarina spēļ...