Poziv sustava Linux Popen u C

Poziv Sustava Linux Popen U C



Funkcija popen() izvršit će naredbu zadanu naredbom niza. Funkcija bi trebala vratiti pokazivač na tok koji se koristi za čitanje ili pisanje u cjevovod dok također stvara cjevovod između pozivajuće aplikacije i izvršene naredbe. Funkcija Popen dostupna je u standardnoj biblioteci I/O funkcije i pokreće drugi proces za pokretanje naredbe terminala. Otvorena faza funkcije popen() ista je kao otvorena faza funkcije fopen(). Funkcija popen() pokreće proces račvanjem, konstruiranjem cijevi i izvršavanjem ljuske. Budući da je cijev prema zadanim postavkama jednosmjerna; kao rezultat toga, tok je ili samo za čitanje ili samo za pisanje. Nakon uspješnog izvođenja funkcije popen(), dobiva se otvoreni tok koji se koristi za čitanje i pisanje cijevi.'

Primjer 1

Sa sljedećim primjerom programa, čitat ćemo datoteke koje postoje u trenutnom direktoriju ili mapi koristeći popen sistemski poziv. Prvo, unijeli smo datoteku zaglavlja stdio.h C standardne biblioteke. Zatim, imamo program int main()funkciju gdje smo postavili funkciju popen. Prije toga, uspostavili smo pokazivačku varijablu “FileOpen” iz klase “FILE”. Varijabla pokazivača datoteke označava sljedeći bajt za čitanje ili pisanje.







Nakon toga smo dodijelili graničnu vrijednost znaka za čitanje. Varijabla 'FileOpen' tada je pozvala funkciju 'popen'. Funkcija “popen” preuzima naredbu “ls -l” Linuxa, koja će ispisati sve datoteke trenutnog direktorija. Štoviše, unijeli smo parametar 'r' u funkciju popen, koji označava način čitanja.



Ovdje smo usmjerili proces čitanja datoteka korištenjem funkcije popen. Zatim smo kreiranu cijev obradili petljom while. Dok petlja koristi metode fgets, koje uzimaju argumente 'line', 'sizeof the line' i 'FileOpen'. Fgetovi čitaju usmjeravani proces i pohranjuju ga u simbol “%s” niza. Ovaj određeni simbol se poziva unutar metode printf zajedno s argumentom 'line'. Nakon što smo stvorili obrađenu cijev, s funkcijom pclosed, cijevni proces se može zatvoriti kao što je raspoređeno na kraju donjeg programa.



#include


int glavni ( )

{

DATOTEKA * FileOpen;

char linija [ 130 ] ;


FileOpen = otvori ( 'je -l' , 'r' ) ;

dok ( fgets ( redak, veličina retka, FileOpen ) )

{

printf ( '%s' , crta ) ;

}

zatvoriti ( FileOpen ) ;

}





Funkcija popen programa C račvala je gornji proces i zatim stvorila cijev. Sada smo izvršili obrađenu cijev toka u ljusci s naredbom C kompilacije. Izlaz je naveo sve datoteke u 'Home' direktoriju jer smo izvršili program u tom direktoriju.



Primjer 2

U prethodnom popen programu imamo jednostavnu demonstraciju funkcionalnosti popen programa koji se koristi za usmjeravanje strujanja procesa čitanja datoteka. Sada smo uzeli još jedan primjer funkcije popen gdje smo procijedili proces s načinom pisanja. Razmotrimo program s glavnom funkcijom. Konstruirali smo varijablu pokazivača datoteke unutar glavne funkcije kao 'datoteka'. Pokazivač datoteke postavlja se s funkcijom popen.

Funkcija popen preuzima naredbu 'cat' i 'w' za način pisanja. Ovdje se svaki argument datoteke sekvencijalno čita i šalje na standardni izlaz pomoću naredbe cat. U tijelu for petlje upotrijebili smo funkciju fprintf za ispis brojčanih vrijednosti jer smo naveli simbol '%d'. Zatim zatvoren, proces popen cijevi sa sistemskim pozivom pclose.

#include


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

DATOTEKA * datoteka = otvoriti ( 'mačka' , 'u' ) ;

int x = 0 ;


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


fprintf ( datoteka , 'Moj broj = %d \n ' , x ) ;
}

zatvoriti ( datoteka ) ;

povratak 0 ;

}

Kada smo izvršili gore kreirani proces, on je ispisao vrijednosti brojanja na sljedeći način.

Primjer 3

Sada imamo još jedan program koji prenosi podatke jednog procesa u drugi proces. To ćemo učiniti s cijevi iz popen funkcije. Implementirali smo program korištenjem standardnih biblioteka C-a. Zatim imamo int glavnu funkciju za implementaciju programa. Ovdje smo naveli niz u funkciji sprintf s argumentom 'buffer'. Funkcija sprintf() čuva rezultat u međuspremniku char koji pruža sprintf umjesto da ga šalje u odzivnik.

Nakon toga pozvali smo funkciju popen unutar varijable 'read'. Tu imamo dva procesa unutar funkcije popen. 'wc -c' je prvi proces koji se koristi za brojanje navedenih znakova, a drugi proces je 'w', koji označava da je cijev otvorena u načinu pisanja. Nakon toga, imamo funkciju “fwrite” koja koristi cijev za pisanje podataka. Podatke će primiti 'wc', zatim će prebrojati znak i prikazati u ljusci.

#include

#include

#include

#include

int glavni ( )

{

DATOTEKA * čitati ;

char međuspremnik [ pedeset ] ;

sprintf ( pufer, 'Linux sistemski poziv' ) ;

čitati = otvoriti ( 'wc -c' , 'u' ) ;

fpisati ( međuspremnik, veličina ( char ) ,strlen ( pufer ) , čitati ) ;

zatvoriti ( čitati ) ;

}

Znakovi prikazani u upitu su '17' jer niz koji smo gore naveli sadrži '17' znakova. Proces “wc -c” čita te znakove i ispisuje ih kao izlaz.

Primjer 4

Gornji primjer popen šalje podatke iz jednog procesa u drugi. Ovdje ćemo primati podatke od jednog procesa do drugog procesa putem cijevi. Glavna funkcija programa je konstruirati međuspremnik koji ima “50” vrijednosti. Zatim smo stvorili varijablu 'r', gdje je funkcija popen kreirala proces. Proces “ls” koristi se za ispisivanje datoteka u direktoriju, a proces “r” za čitanje podataka iz cijevi. Proces “ls” prenosi podatke procesu “r” na čitanje. Nakon toga, imamo fread funkciju, koja čita podatke i sprema ih u međuspremnik. Zatim će izjava za ispis ispisati podatke pohranjene u međuspremniku.

#include

#include

#include

#include

int glavni ( )

{

DATOTEKA * r;

char međuspremnik [ pedeset ] ;


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

uplašiti se ( pufer, 1 , 25 , r ) ;


printf ( '%s \n ' , međuspremnik ) ;

zatvoriti ( r ) ;

}

Ovdje se iz radnog direktorija prikazuje samo “50” znakova postojećih datoteka. Stoga će izlaz imati samo 50 znakova.

Zaključak

Dali smo detaljnu demonstraciju Linux popen sistemskih poziva u C jeziku. Implementirali smo četiri primjera u kojima smo postavili funkciju popen. Funkcija popen vraća tok cijevi prema načinu koji smo dodijelili. U primjerima smo koristili i način čitanja i pisanja s funkcijama za rukovanje datotekama fread i fwrite. Koristili smo naziv programa u funkciji popen() kao prvi argument. Drugi argument je datoteka 'r' kao način čitanja ili 'w' kao način pisanja.