Linux Popen sistēmas zvans C

Linux Popen Sistemas Zvans C



' Funkcija popen () izpildīs komandu, ko dod virknes komanda. Funkcijai ir jāatgriež rādītājs uz straumi, kas tiek izmantota, lai lasītu vai rakstītu caurulē, vienlaikus izveidojot cauruli starp izsaucošo lietojumprogrammu un izpildīto komandu. Funkcija Popen ir pieejama I/O funkcijas standarta bibliotēkā, un tā rada otru procesu, lai palaistu termināļa komandu. Popen () atvērtā fāze ir tāda pati kā atvērtā fāze funkcijā fopen (). Funkcija popen () ierosina procesu, sadalot dakšiņu, izveidojot cauruli un izpildot apvalku. Tā kā caurule pēc noklusējuma ir vienvirziena; rezultātā straume ir vai nu tikai lasāma, vai tikai rakstāma. Funkcijas popen() veiksmīgai izpildei tiek iegūta atvērta straume, kas tiek izmantota caurulei lasīšanai un rakstīšanai.

1. piemērs

Izmantojot šo programmas piemēru, mēs nolasīsim pašreizējā direktorijā vai mapē esošos failus, izmantojot popen sistēmas zvanu. Pirmkārt, mēs esam ievadījuši C standarta bibliotēkas galvenes failu stdio.h. Pēc tam mums ir programmas int main() funkcija, kurā esam izvietojuši funkciju popen. Pirms tam mēs izveidojām rādītāja mainīgo “FileOpen” no klases “FILE”. Faila rādītāja mainīgais norāda nākamo baitu, kas jālasa vai jāraksta.







Pēc tam mēs piešķīrām nolasāmās rakstzīmes robežvērtību. Mainīgais “FileOpen” pēc tam izsauca funkciju “popen”. Funkcija “popen” izmanto Linux komandu “ls -l”, kurā tiks uzskaitīti visi pašreizējā direktorija faili. Turklāt popen funkcijā esam ievadījuši parametru “r”, kas norāda lasīšanas režīmu.



Šeit mēs esam vadījuši failu lasīšanas procesu, izmantojot popen funkciju. Tālāk mēs apstrādājām izveidoto cauruli ar while cilpu. Cilpa while izmanto fgets metodes, kas izmanto argumentus “line”, “sizeof line” un “FileOpen”. Fgets nolasīja konveijeru procesu un saglabāja to virknes simbolā “%s”. Šis konkrētais simbols tiek izsaukts printf metodes iekšpusē kopā ar argumentu “līnija”. Kad mēs esam izveidojuši apstrādāto cauruli ar funkciju pccled, cauruļvadu procesu var aizvērt, kā norādīts tālāk norādītās programmas beigās.



#include


int galvenais ( )

{

FILE * File Open;

ogles līnija [ 130 ] ;


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

kamēr ( fgets ( līnija, līnijas izmērs, FileOpen ) )

{

printf ( '%s' , līnija ) ;

}

pclose ( Atvērt failu ) ;

}





Programmas C popen funkcija veicināja iepriekš minēto procesu un pēc tam izveidoja cauruli. Tagad mēs esam izpildījuši apstrādāto straumes cauruli apvalkā ar C kompilācijas komandu. Izvade ir uzskaitījusi visus failus direktorijā 'Sākums', jo mēs esam izpildījuši programmu šajā direktorijā.



2. piemērs

Iepriekšējā popen programmā mums ir vienkārša popen programmas funkcionalitātes demonstrācija, kas tiek izmantota failu lasīšanas straumēšanas procesa cauruļvadiem. Tagad mēs esam ņēmuši vēl vienu popen funkcijas piemēru, kurā procesu esam ievadījuši rakstīšanas režīmā. Apskatīsim programmu ar galveno funkciju. Mēs esam izveidojuši faila rādītāja mainīgo galvenajā funkcijā kā “fails”. Faila rādītājs tiek izvietots ar popen funkciju.

Funkcija popen izmanto komandu “cat” un rakstīšanas režīmam “w”. Šeit katrs faila arguments tiek secīgi nolasīts un nosūtīts standarta izvadei ar komandu cat. For cilpas pamattekstā mēs esam izmantojuši funkciju fprintf, lai drukātu skaitliskās skaitīšanas vērtības, jo esam norādījuši simbolu “%d”. Pēc tam aizvērts, popen caurules process ar pclose sistēmas izsaukumu.

#include


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

FILE * failu = popēns ( 'kaķis' , 'iekšā' ) ;

int x = 0 ;


priekš ( x = 0 ;x < 5 ;x++ ) {


fprintf ( failu , 'Mans skaits = %d \n ' , x ) ;
}

pclose ( failu ) ;

atgriezties 0 ;

}

Kad mēs izpildījām iepriekš izveidoto procesu, tas izdrukāja skaitīšanas vērtības šādā veidā.

3. piemērs

Tagad mums ir cita programma, kas pārsūta viena procesa datus citam procesam. Mēs to darīsim ar cauruli no popen funkcijas. Mēs esam ieviesuši programmu, izmantojot C standarta bibliotēkas. Pēc tam mums ir int galvenā funkcija programmas izvietošanai. Šeit mēs esam norādījuši virkni funkcijā sprintf ar argumentu “buferis”. Funkcija sprintf() saglabā rezultātu sprintf nodrošinātajā char buferī, nevis nosūta to uz uzvedni.

Pēc tam mēs nosaucām popen funkciju mainīgā “lasīt” iekšpusē. Tur mums ir divi procesi popen funkcijā. “wc -c” ir pirmais process, ko izmanto, lai saskaitītu norādītās rakstzīmes, un otrais process ir “w”, kas norāda, ka caurule ir atvērta rakstīšanas režīmā. Pēc tam mums ir funkcija “fwrite”, kas datu ierakstīšanai izmanto cauruli. Datus saņems “wc”, pēc tam saskaitīs rakstzīmi un parādīs čaulā.

#include

#include

#include

#include

int galvenais ( )

{

FILE * lasīt ;

char buferis [ piecdesmit ] ;

sprintf ( buferis, 'Linux sistēmas zvans' ) ;

lasīt =atvērt ( 'wc -c' , 'iekšā' ) ;

fwrite ( buferis, izmērs ( char ) ,strlen ( buferis ) , lasīt ) ;

pclose ( lasīt ) ;

}

Uzvednē redzamās rakstzīmes ir “17”, jo iepriekš norādītajā virknē ir “17” rakstzīmes. Process “wc -c” nolasa šīs rakstzīmes un izdrukā tās kā izvadi.

4. piemērs

Iepriekš minētais popen piemērs nosūta datus no viena procesa uz citu. Šeit mēs caur cauruli saņemsim datus no viena procesa uz otru procesu. Programmas galvenā funkcija ir izveidot buferi, kas ņem “50” vērtības. Pēc tam mēs izveidojām mainīgo “r”, kur popen funkcija izveidoja procesu. “ls” process tiek izmantots, lai uzskaitītu direktorijas failus, un “r” process datu nolasīšanai no caurules. “ls” process pārsūta datus uz “r” procesu, lai tos nolasītu. Pēc tam mums ir fread funkcija, kas nolasa datus un saglabā datus buferī. Pēc tam drukāšanas paziņojumā tiks izdrukāti buferī saglabātie dati.

#include

#include

#include

#include

int galvenais ( )

{

FILE * r;

char buferis [ piecdesmit ] ;


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

fread ( buferis, 1 , 25 , r ) ;


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

pclose ( r ) ;

}

Šeit no darba direktorija tiek parādītas tikai “50” esošo failu rakstzīmes. Tāpēc izvadē būs tikai 50 rakstzīmes.

Secinājums

Mēs esam snieguši detalizētu Linux popen sistēmas zvanu demonstrāciju C valodā. Mēs esam ieviesuši četrus piemērus, kuros esam izvietojuši popen funkciju. Popen funkcija atgriež cauruļu plūsmu atbilstoši mūsu piešķirtajam režīmam. Piemēros esam izmantojuši gan lasīšanas, gan rakstīšanas režīmu ar failu apstrādes funkcijām fread un fwrite. Mēs esam izmantojuši programmas nosaukumu funkcijā popen () kā tās pirmo argumentu. Otrais arguments ir fails “r” kā lasīšanas režīms vai “w” kā rakstīšanas režīms.