Sistemski klic Linux Popen v C

Sistemski Klic Linux Popen V C



Funkcija popen() bo izvedla ukaz, ki ga poda ukaz niza. Funkcija mora vrniti kazalec na tok, ki se uporablja za branje ali pisanje v cev, hkrati pa ustvari cev med klicno aplikacijo in izvedenim ukazom. Funkcija Popen je na voljo v standardni knjižnici I/O funkcije in sproži drugi postopek za zagon terminalskega ukaza. Odprta faza funkcije popen() je enaka fazi odprtosti funkcije fopen(). Funkcija popen() sproži postopek z razcepom, konstruiranjem cevi in ​​izvajanjem lupine. Ker je cev privzeto enosmerna; posledično je tok samo za branje ali samo za pisanje. Ob uspešni izvedbi funkcije popen() se pridobi odprti tok, ki se uporablja za branje in pisanje v cevi.«

Primer 1

Z naslednjim primerom programa bomo s sistemskim klicem popen prebrali datoteke, ki obstajajo v trenutnem imeniku ali mapi. Najprej smo vnesli datoteko glave stdio.h standardne knjižnice C. Nato imamo program int main()funkcijo, kjer smo razmestili funkcijo popen. Pred tem smo vzpostavili kazalno spremenljivko “FileOpen” iz razreda “FILE”. Spremenljivka kazalca datoteke označuje naslednji bajt za branje ali pisanje.







Po tem smo znaku dodelili mejno vrednost za branje. Spremenljivka 'FileOpen' je nato priklicala funkcijo 'popen'. Funkcija »popen« prevzame ukaz »ls -l« iz Linuxa, ki prikaže seznam vseh datotek trenutnega imenika. Poleg tega smo v funkcijo popen vnesli parameter »r«, ki označuje način branja.



Tukaj smo napeljali postopek branja datotek z uporabo funkcije popen. Nato smo ustvarjeno cev obdelali z zanko while. Zanka while uporablja metode fgets, ki sprejmejo argumente »line«, »sizeof the line« in »FileOpen«. Fgets prebere cevni proces in ga shrani v simbol »%s« niza. Ta poseben simbol se pokliče v metodi printf skupaj z argumentom »line«. Ko ustvarimo obdelano cev s funkcijo pclosed, lahko cevni proces zapremo, kot je razporejen na koncu spodnjega programa.



#include


int main ( )

{

MAPA * FileOpen;

char line [ 130 ] ;


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

medtem ( fgets ( vrstica, velikost vrstice, FileOpen ) )

{

printf ( '%s' , vrstica ) ;

}

blizu ( FileOpen ) ;

}





Funkcija popen programa C je razcepila zgornji proces in nato ustvarila cev. Zdaj smo izvedli obdelano cev toka v lupini z ukazom za prevajanje C. Izhod vsebuje seznam vseh datotek v imeniku »Domači«, ko smo izvedli program v tem imeniku.



Primer 2

V prejšnjem programu popen imamo preprosto predstavitev funkcionalnosti programa popen, ki se uporablja za cevovod pretočnega procesa branja datotek. Zdaj smo vzeli še en primer funkcije popen, kjer smo proces napeljali z načinom pisanja. Oglejmo si program z glavno funkcijo. Znotraj glavne funkcije smo izdelali spremenljivko kazalca datoteke kot »datoteko«. Kazalec datoteke je razporejen s funkcijo popen.

Funkcija popen prevzame ukaz »cat« in »w« za način pisanja. Tu je vsak argument datoteke zaporedno prebran in poslan v standardni izhod z ukazom cat. V telesu zanke for smo uporabili funkcijo fprintf za tiskanje številskih vrednosti štetja, saj smo določili simbol »%d«. Nato zaprt, proces cevi popen s sistemskim klicem pclose.

#include


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

MAPA * mapa = odpreti ( 'mačka' , 'v' ) ;

int x = 0 ;


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


fprintf ( mapa , 'Moj štetje = %d \n ' , x ) ;
}

blizu ( mapa ) ;

vrnitev 0 ;

}

Ko smo izvedli zgoraj ustvarjeni postopek, je natisnil vrednosti štetja na naslednji način.

Primer 3

Zdaj imamo drug program, ki prenaša podatke enega procesa v drug proces. To bomo naredili s cevjo iz funkcije popen. Program smo implementirali z uporabo standardnih knjižnic jezika C. Nato imamo glavno funkcijo int za razmestitev programa. Tukaj smo določili niz v funkciji sprintf z argumentom »buffer«. Funkcija sprintf() hrani rezultat v medpomnilniku char, ki ga zagotavlja sprintf, namesto da bi ga poslala v poziv.

Po tem smo znotraj spremenljivke »branje« poklicali funkcijo popen. V funkciji popen imamo dva procesa. »wc -c« je prvi postopek, ki se uporablja za štetje podanih znakov, drugi proces pa je »w«, ki označuje, da je cev odprta v načinu pisanja. Po tem imamo funkcijo 'fwrite', ki uporablja cev za zapisovanje podatkov. Podatke bo prejel »wc«, nato bo preštel znak in prikazal v lupini.

#include

#include

#include

#include

int main ( )

{

MAPA * prebrati ;

medpomnilnik char [ petdeset ] ;

sprintf ( medpomnilnik, 'Sistemski klic Linux' ) ;

prebrati =odprt ( 'wc -c' , 'v' ) ;

fwrite ( medpomnilnik, velikost ( char ) ,strlen ( medpomnilnik ) , prebrati ) ;

blizu ( prebrati ) ;

}

Znaki, prikazani v pozivu, so »17«, ker niz, ki smo ga navedli zgoraj, vsebuje »17« znakov. Proces “wc -c” prebere te znake in jih natisne kot izhod.

Primer 4

Zgornji primer popen pošilja podatke iz enega procesa v drugega. Tu bomo podatke od enega procesa do drugega sprejemali po cevi. Glavna funkcija programa je izdelava medpomnilnika, ki sprejme vrednosti '50'. Nato smo ustvarili spremenljivko 'r', kjer je funkcija popen ustvarila proces. Postopek »ls« se uporablja za seznam datotek imenika, postopek »r« pa za branje podatkov iz cevi. Proces »ls« posreduje podatke procesu »r« v branje. Po tem imamo funkcijo fread, ki prebere podatke in jih shrani v medpomnilnik. Nato bo izjava za tiskanje natisnila podatke, shranjene v medpomnilniku.

#include

#include

#include

#include

int main ( )

{

MAPA * r;

medpomnilnik char [ petdeset ] ;


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

fread ( medpomnilnik, 1 , 25 , r ) ;


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

blizu ( r ) ;

}

Tukaj je prikazanih le “50” znakov obstoječih datotek iz delovnega imenika. Zato bo imel izhod le 50 znakov.

Zaključek

Podali smo podrobno predstavitev sistemskih klicev Linux popen v jeziku C. Implementirali smo štiri primere, kjer smo razmestili funkcijo popen. Funkcija popen vrne cevni tok glede na način, ki smo ga dodelili. V primerih smo uporabili način branja in pisanja s funkcijama za upravljanje datotek fread in fwrite. Uporabili smo ime programa v funkciji popen() kot njen prvi argument. Drugi argument je datoteka »r« kot način branja ali »w« kot način pisanja.