Linux Popeni süsteemikõne C-s

Linux Popeni Susteemikone C S



Funktsioon popen() täidab stringi käsuga antud käsku. Funktsioon peaks tagastama kursori voogu, mida kasutatakse toru lugemiseks või kirjutamiseks, luues samal ajal toru kutsuva rakenduse ja käivitatud käsu vahele. Funktsioon Popen on saadaval I/O-funktsiooni standardteegis ja käivitab terminalikäsu käitamiseks teise protsessi. Popen() avatud faas on sama, mis funktsiooni fopen() avatud faas. Funktsioon popen() käivitab protsessi hargnemise, toru konstrueerimise ja kesta täitmisega. Kuna toru on vaikimisi ühesuunaline; selle tulemusena on voog kas kirjutuskaitstud või kirjutuskaitsega. Funktsiooni popen() edukal täitmisel saadakse avatud voog, mida kasutatakse toru lugemiseks ja kirjutamiseks.

Näide 1

Järgmise näidisprogrammiga loeme popeni süsteemikutset kasutades praeguses kataloogis või kaustas olevaid faile. Esiteks oleme sisestanud C standardteegi päisefaili stdio.h. Seejärel on meil programmi int main() funktsioon, kus oleme juurutanud funktsiooni popen. Enne seda lõime klassist 'FILE' kursori muutuja 'FileOpen'. Faili osuti muutuja näitab järgnevat baiti, mida lugeda või kirjutada.







Pärast seda määrasime tegelasele lugemise piirväärtuse. Muutuja 'FileOpen' kutsus seejärel esile funktsiooni 'popen'. Funktsioon 'popen' võtab Linuxi käsu 'ls -l', mis loetleb kõik praeguse kataloogi failid. Lisaks oleme popen-funktsiooni sisestanud parameetri 'r', mis näitab lugemisrežiimi.



Siin oleme failide lugemisprotsessi juhtinud, kasutades popen funktsiooni. Järgmisena töötlesime loodud toru while-tsükliga. While-silmus kasutab fgetsi meetodeid, mis võtavad argumendid 'rida', 'rea suurus' ja 'FileOpen'. Fgets lugesid toruprotsessi ja salvestasid selle stringi sümbolisse %s. Seda konkreetset sümbolit kutsutakse printf-meetodi sees koos argumendiga 'joon'. Kui oleme loonud toru töödeldud funktsiooniga pclosed, saab torujuhtme protsessi sulgeda, nagu alloleva programmi lõpus juurutatud.



#include


int main ( )

{

FAIL * FileOpen;

söe joon [ 130 ] ;


FileOpen = popen ( 'ls -l' , 'r' ) ;

samal ajal ( fgets ( rida, rea suurus, FileOpen ) )

{

printf ( '%s' , rida ) ;

}

pclose ( FailAva ) ;

}





Programmi C popen funktsioon viis ülaltoodud protsessi ja lõi seejärel toru. Nüüd oleme käivitanud kestas oleva voo töödeldud toru käsuga C kompileerimine. Väljundis on loetletud kõik 'Kodu' kataloogis olevad failid, kuna oleme programmi selles kataloogis käivitanud.



Näide 2

Eelmises popeni programmis on meil lihtne demonstratsioon popeni programmi funktsionaalsusest, mida kasutatakse failide lugemise voogesituse protsessis. Nüüd oleme võtnud veel ühe näite popen-funktsioonist, kus oleme protsessi kirjutamisrežiimiga torujuhtmega ühendanud. Vaatleme programmi koos põhifunktsiooniga. Faili osuti muutuja oleme põhifunktsiooni sees konstrueerinud kui 'fail'. Failikursor on juurutatud koos popen-funktsiooniga.

Funktsioon popen võtab kirjutusrežiimi jaoks käsu 'cat' ja 'w'. Siin loetakse iga faili argumenti järjestikku ja saadetakse cat-käsk standardväljundisse. For silmuse kehas oleme kasutanud numbriliste loendusväärtuste printimiseks funktsiooni fprintf, kuna oleme määranud sümboli '%d'. Seejärel suleti popen toru protsess koos pclose süsteemikutsega.

#include


int main ( int argc, char ** argv ) {

FAIL * faili = popen ( 'kass' , 'sisse' ) ;

int x = 0 ;


jaoks ( x = 0 ;x < 5 ;x++ ) {


fprintf ( faili , 'Minu arv = %d \n ' , x ) ;
}

pclose ( faili ) ;

tagasi 0 ;

}

Kui teostasime ülaltoodud protsessi, printis see loendusväärtused järgmisel viisil.

Näide 3

Nüüd on meil veel üks programm, mis edastab ühe protsessi andmed teisele protsessile. Teeme seda popen-funktsiooni toruga. Oleme programmi juurutanud C standardsete teekide abil. Seejärel on meil programmi juurutamiseks põhifunktsioon int. Siin oleme määranud funktsiooni sprintf stringi argumendiga 'puhver'. Funktsioon sprintf() hoiab tulemuse pigem sprintf-i pakutavas tähepuhvris, mitte ei saada seda viipale.

Pärast seda kutsusime muutuja 'loe' sees funktsiooni popen. Seal on meil popeni funktsiooni sees kaks protsessi. 'wc -c' on esimene protsess, mida kasutatakse etteantud märkide loendamiseks, ja teine ​​protsess on 'w', mis näitab, et toru on kirjutamisrežiimis avatud. Pärast seda on meil funktsioon 'fwrite', mis kasutab andmete kirjutamiseks toru. Andmed võtab vastu “wc”, seejärel loendab tähemärk ja kuvatakse kestas.

#include

#include

#include

#include

int main ( )

{

FAIL * lugeda ;

söepuhver [ viiskümmend ] ;

sprintf ( puhver, 'Linux süsteemi kõne' ) ;

lugeda =ava ( 'wc -c' , 'sisse' ) ;

fwrite ( puhver, suurus ( char ) ,strlen ( puhver ) , lugeda ) ;

pclose ( lugeda ) ;

}

Viipas kuvatavad märgid on '17', kuna ülalpool määratud string sisaldab '17' märki. Protsess “wc -c” loeb need märgid ja prindib need väljundina.

Näide 4

Ülaltoodud popeni näide saadab andmed ühest protsessist teise. Siin saame toru kaudu andmed ühest protsessist teise protsessi. Programmi põhiülesanne on puhver, mis võtab '50' väärtused. Seejärel lõime muutuja 'r', kus popeni funktsioon lõi protsessi. Protsessi 'ls' kasutatakse kataloogi failide loetlemiseks ja 'r' protsessi torust andmete lugemiseks. Protsess 'ls' edastab andmed lugemiseks 'r' protsessile. Pärast seda on meil funktsioon fread, mis loeb andmeid ja salvestab andmed puhvrisse. Seejärel prindib printimisavaldus puhvrisse salvestatud andmed.

#include

#include

#include

#include

int main ( )

{

FAIL * r;

söepuhver [ viiskümmend ] ;


r = popen ( 'ls' , 'r' ) ;

kartma ( puhver, 1 , 25 , r ) ;


printf ( '%s \n ' , puhver ) ;

pclose ( r ) ;

}

Siin kuvatakse töökataloogist ainult '50' tähemärki olemasolevatest failidest. Seetõttu on väljundis ainult 50 tähemärki.

Järeldus

Oleme esitanud üksikasjaliku tutvustuse Linuxi popeni süsteemikutsetest C-keeles. Oleme rakendanud neli näidet, kus oleme kasutanud popeni funktsiooni. Funktsioon popen tagastab toruvoo vastavalt meie määratud režiimile. Näidetes oleme kasutanud nii lugemis- kui ka kirjutamisrežiimi koos failitöötlusfunktsioonidega fread ja fwrite. Oleme kasutanud programmi nime funktsioonis popen() selle esimese argumendina. Teine argument on fail 'r' lugemisena või 'w' kirjutamisrežiimina.