Linux Popen System Call In C

Linux Popen System Call In C

Popen () -funksjonen vil utføre kommandoen gitt med kommandoen over strengen. Funksjonen skal returnere en peker til en strøm som brukes til å lese eller skrive til røret mens du også lager et rør mellom anropsprogrammet og den utførte kommandoen. Popen -funksjonen er tilgjengelig i standardbiblioteket for I/O -funksjonen og gyter en andre prosess for å kjøre en terminalkommando. Den åpne fasen av popen () er den samme som den åpne fasen i Fopen () -funksjonen. Popen () -funksjonen initierer en prosess ved å forkle, konstruere et rør og utføre skallet. Siden et rør er ensrettet som standard; Som et resultat er strømmen enten skrivebeskyttet eller skrivebeskyttet. På Popen () funksjonen vellykket utførelse, oppnås en åpen strøm som brukes til at røret skal lese og skrive.”

Eksempel 1

Med følgende eksempelprogram vil vi lese filene som finnes i den gjeldende katalogen eller mappen ved hjelp av Popen System Call. For det første har vi inngående STDIO.h headerfil for C -standardbiblioteket. Deretter har vi en program int main () -funksjon der vi har distribuert popenfunksjonen. Før dette etablerte vi pekervariabelen “FileOpen” fra klassen “File”. Pekervariabelen til filen indikerer den etterfølgende byte til å lese eller skrive.

Etter det tildelte vi karakterens grenseverdi som skal leses. Variabelen “FileOpen” påkalte deretter “Popen” -funksjonen. “Popen” -funksjonen tar “LS -L” -kommandoen til Linux, som vil liste opp alle filene i den gjeldende katalogen. Videre har vi innløp av “R” -parameteren i popenfunksjonen, som indikerer lesemodus.

Her har vi ledet filene med lesing av filene ved å bruke popenfunksjonen. Neste, vi behandlet det opprettede røret med mens Loop. Mens Loop bruker FGETS -metodene, som tar argumentene "linje", "størrelse på linjen" og "filopen". Fettene leste den rørprosessen og lagret den i “%s” -symbolet på streng. Dette spesielle symbolet kalles inne i Printf -metoden sammen med "linjen" -argumentet. Når vi har opprettet røret som er behandlet, med PClosed -funksjonen, kan rørprosessen lukkes som distribuert på slutten av programmet nedenfor.

#inkludere
int main ()

Fil *filopen;
Char Line [130];
Filopen = popen ("ls -l", "r");
mens (fgets (linje, størrelse av linje, filopen))

printf ("%s", linje);

pClose (filopen);

Popenfunksjonen til C -programmet gafflet den ovennevnte prosessen og opprettet deretter røret. Nå har vi utført det behandlede røret til strømmen i skallet med C -kompilasjonskommandoen. Utgangen har listet opp alle filene i "Home" -katalogen, da vi har utført programmet i den katalogen.

Eksempel 2

I det forrige Popen -programmet har vi en enkel demonstrasjon av funksjonaliteten til Popen -programmet som brukes til å pipere streamingprosessen med å lese filer. Nå har vi tatt et annet eksempel på popenfunksjonen der vi har pipet prosessen med skrivemodus. La oss vurdere programmet med hovedfunksjonen. Vi har konstruert filpekervariabelen i hovedfunksjonen som "fil". Filpekeren er distribuert med popenfunksjonen.

Popen -funksjonen tar “Cat” -kommandoen og “W” for skrivemodus. Her blir hvert filargument sekvensielt lest og sendt til standardutgang av CAT -kommandoen. I for -sløyfekroppen har vi brukt FPRintF -funksjonen for å skrive ut de numeriske telleverdiene, da vi har spesifisert symbolet “%d”. Deretter lukket, popen -rørprosessen med pclose systemanrop.

#inkludere
int main (int argc, char ** argv)
Fil *fil = popen ("katt", "w");
int x = 0;
for (x = 0; x<5;x++)
fprintf (fil, "min telling = %d \ n", x);

pClose (fil);
return 0;

Da vi utførte den ovennevnte prosessen, trykket den telleverdiene på følgende måte.

Eksempel 3

Nå har vi et annet program som overfører dataene fra en prosess til en annen prosess. Vi vil gjøre dette med røret fra popenfunksjonen. Vi har implementert programmet ved å bruke standardbibliotekene til C. Deretter har vi en INT hovedfunksjon for å distribuere et program. Her har vi spesifisert strengen i Sprintf -funksjonen med "buffer" -argumentet. Sprintf () -funksjonen holder resultatet på char -bufferen levert av Sprintf i stedet for å sende den til ledeteksten.

Etter det kalte vi popenfunksjonen inne i "Read" -variabelen. Der har vi to prosesser inne i popenfunksjonen. "WC -C" er den første prosessen som brukes til å telle de medfølgende tegnene, og den andre prosessen er "W", som indikerer at røret er åpent i skrivemodus. Etter det har vi "fwrite" -funksjonen som bruker røret til å skrive data. Dataene vil bli mottatt av “WC”, talt deretter tegnet og vist i skallet.

#inkludere
#inkludere
#inkludere
#inkludere
int main ()

Fil *Les;
char buffer [50];
Sprintf (Buffer, "Linux System Call");
lese = popen ("wc -c", "w");
fwrite (buffer, størrelse av (char), strlen (buffer), lest);
pClose (les);

Tegnene som vises i ledeteksten er “17” fordi strengen vi har spesifisert ovenfor inneholder “17” tegn. "WC -C" -prosessen leser disse tegnene og skriver dem ut som en utgang.

Eksempel 4

Eksemplet ovenfor av Popen sender dataene fra en prosess til en annen. Her vil vi motta dataene fra en prosess til den andre prosessen via et rør. Hovedfunksjonen til programmet er å konstruere bufferen, som tar "50" verdier. Deretter opprettet vi variabelen “R”, der popenfunksjonen opprettet prosessen. "LS" -prosessen brukes til å liste opp filene i katalogen, og "R" -prosessen for å lese dataene fra røret. "LS" -prosessen overfører dataene til "R" -prosessen for å lese. Etter dette har vi Fread -funksjonen, som leser dataene og lagrer dataene i bufferen. Deretter vil utskriftserklæringen skrive ut dataene som er lagret i bufferen.

#inkludere
#inkludere
#inkludere
#inkludere
int main ()

Fil *r;
char buffer [50];
r = popen ("ls", "r");
Fread (buffer, 1, 25, r);
printf ("%s \ n", buffer);
PClose (R);

Her vises bare "50" tegn på de eksisterende filene fra arbeidskatalogen. Derfor vil utgangen bare ha 50 tegn.

Konklusjon

Vi har gitt en detaljert demonstrasjon av Linux Popen System -samtaler på C -språket. Vi har implementert fire eksempler der vi har distribuert popenfunksjonen. Popenfunksjonen returnerer rørstrømmen i henhold til modusen vi har tildelt. I eksemplene har vi brukt både lese- og skrivemodus med filhåndteringsfunksjonene Fread og Fwrite. Vi har brukt navnet på programmet i Popen () -funksjonen som det første argumentet. Det andre argumentet er en fil “R” som lest eller “w” som skrivemodus.