C Ohjelmointi

Kuinka käyttää putkitoimintoa C-kielellä

Kuinka käyttää putkitoimintoa C-kielellä

Putki on väliaine prosessien väliseen viestintään. Yksi prosessi kirjoittaa tietoja putkeen ja toinen prosessi lukee tiedot putkesta. Tässä artikkelissa näemme, miten pipe () -funktiota käytetään konseptin toteuttamiseen C-kieltä käyttäen.

Tietoja Pipestä

Putkessa data pidetään FIFO-järjestyksessä, mikä tarkoittaa tietojen kirjoittamista putken toiseen päähän peräkkäin ja tietojen lukemista putken toisesta päästä samassa järjestyksessä.

Jos jokin prosessi lukee putkesta, mutta mikään muu prosessi ei ole vielä kirjoittanut putkeen, read palauttaa tiedoston lopun. Jos prosessi haluaa kirjoittaa putkeen, mutta putkeen ei ole liitetty muuta prosessia lukemista varten, tämä on virhetila ja putki tuottaa SIGPIPE-signaalin.

Otsikkotiedosto

#sisältää

Syntaksi

int putki (int filedes [2])

Väitteet

Tämä funktio vie yhden argumentin, kahden kokonaisluvun taulukon (filedes). filedes [0] käytetään lukemiseen putkesta ja filedes [1] käytetään kirjoittamiseen putkeen. Prosessi, joka haluaa lukea putkesta, pitäisi sulkea filedes [1], ja prosessin, joka haluaa kirjoittaa putkeen, pitäisi sulkeutua filedes [0].  Jos putken tarpeettomia päitä ei ole nimenomaisesti suljettu, tiedostopäätä (EOF) ei koskaan palauteta.

Palautusarvot

Menestyksen jälkeen putki() palauttaa arvon 0, epäonnistumisen yhteydessä funktio palauttaa arvon -1.

Kuvallisesti voimme edustaa putki() toimi seuraavasti:

Alla on muutama esimerkki, joka kuvaa putkitoiminnon käyttöä C-kielellä.

Esimerkki 1

Tässä esimerkissä näemme, miten putkitoiminto toimii. Vaikka putken käyttö yhdessä prosessissa ei ole kovin hyödyllistä, mutta saamme idean.

// Esimerkki 1.c
#sisältää
#sisältää
#sisältää
#sisältää
int main ()

int n;
int filedes [2];
hiilipuskuri [1025];
char * message = "Hei, maailma!";
putki (filedes);
kirjoita (filedes [1], viesti, strlen (viesti));
jos ((n = lue (filedes [0], puskuri, 1024))> = 0)
puskuri [n] = 0; // lopeta merkkijono
printf ("lue% d tavua putkesta:"% s "\ n", n, puskuri);

muu
perror ("lukea");
poistuminen (0);

Tässä olemme ensin luoneet putken putki() sitten kirjoitetaan putkeen käyttäen kalat [1] loppuun. Sitten tiedot on luettu käyttämällä putken toista päätä, joka on filedes [0]. Luimme ja kirjoitimme tiedostoon lukea() ja kirjoittaa() toimintoja.

Esimerkki 2

Tässä esimerkissä näemme, kuinka vanhempien ja lasten prosessit kommunikoivat putken avulla.

// Esimerkki 2.c
#sisältää
#sisältää
#sisältää
#sisältää
#sisältää
int main ()

int filedes [2], natavua;
pid_t childpid;
char string [] = "Hei maailma!\ n ";
char readbuffer [80];
putki (filedes);
jos ((lapsen = haarukka ()) == -1)

perror ("haarukka");
poistuminen (1);

jos (lapsi = = 0)

sulje (filedes [0]); // Lapsiprosessi ei tarvitse tätä putken päätä
/ * Lähetä "merkkijono" putken ulostulopuolen läpi * /
kirjoita (filedes [1], merkkijono, (strlen (merkkijono) +1));
poistuminen (0);

muu

/ * Vanhempi prosessi sulkee putken ulostulopuolen * /
sulje (filedes [1]); // Vanhempi prosessi ei tarvitse tätä putken päätä
/ * Lue merkkijono putkesta * /
natavua = lukea (filedes [0], readbuffer, sizeof (readbuffer));
printf ("Lue merkkijono:% s", readbuffer);

paluu (0);

Ensinnäkin yksi putki on luotu käyttämällä putkitoimintoa, sitten lapsiprosessi on haarautunut. Sitten lapsiprosessi sulkee lukupään ja kirjoittaa putkeen. Pääprosessi sulkee kirjoituspään, lukee putkesta ja näyttää sen. Tässä tiedonsiirto on vain yksi tapa lapselta vanhemmalle.

Päätelmä:

putki() on tehokas järjestelmäkutsu Linuxissa. Tässä artikkelissa olemme nähneet vain yksisuuntaisen tiedonkulun, yksi prosessi kirjoittaa ja toinen prosessi lukee, luoden kaksi putkea, voimme saavuttaa myös kaksisuuntaisen tiedonkulun.

Remap your mouse buttons differently for different software with X-Mouse Button Control
Maybe you need a tool that could make your mouse's control change with every application that you use. If this is the case, you can try out an applica...
Microsoft Sculpt Touch Wireless Mouse Review
I recently read about the Microsoft Sculpt Touch wireless mouse and decided to buy it. After using it for a while, I decided to share my experience wi...
AppyMouse On-screen Trackpad and Mouse Pointer for Windows Tablets
Tablet users often miss the mouse pointer, especially when they are habitual to using the laptops. The touchscreen Smartphones and tablets come with m...