Linux Popen System Call in c

Linux Popen System Call in c

"Funkcja Popen () przeprowadzi polecenie podane przez polecenie ciągu. Funkcja powinna zwrócić wskaźnik do strumienia używanego do odczytu lub zapisu do rury, jednocześnie tworząc rurę między aplikacją wywołującą a wykonanym poleceniem. Funkcja popen jest dostępna w standardowej bibliotece funkcji we/wy i spawnuje drugi proces uruchamiania polecenia terminali. Otwarta faza popen () jest taka sama jak faza otwarta w funkcji Fopen (). Funkcja Popen () inicjuje proces, rozwijając, konstruując rurę i wykonując skorupę. Ponieważ rura jest domyślnie jednokierunkowa; W rezultacie strumień jest tylko tylko do odczytu, albo tylko. W funkcji popen () udane wykonywanie uzyskuje się otwarty strumień, który jest używany dla rury do czytania i pisania."

Przykład 1

Dzięki następującemu przykładowi przeczytamy pliki, które istnieją w bieżącym katalogu lub folderze za pomocą wywołania systemu Popen. Po pierwsze, wprowadzimy stdio.H Plik nagłówka standardowej biblioteki C. Następnie mamy funkcję programu int main (), w której wdrożyliśmy funkcję popen. Wcześniej ustaliliśmy zmienną wskaźnika „Fileopen” z klasy „Plik”. Zmienna wskaźnika pliku wskazuje następujący bajt do odczytu lub zapisu.

Następnie przypisaliśmy wartość limitu postaci do odczytania. Zmienna „Fileopen” wywołała funkcję „Popen”. Funkcja „Popen” przyjmuje polecenie „LS -L” Linux, która wymieniła wszystkie pliki bieżącego katalogu. Ponadto wprowadzamy parametr „R” w funkcji Popen, co wskazuje tryb odczytu.

Tutaj potwierdziliśmy proces odczytu plików, wykorzystując funkcję Popen. Następnie przetworzyliśmy utworzoną rurę za pomocą pętli while. While Loop korzysta z metod FGES, która przyjmuje argumenty „Linia”, „Rozmiar linii” i „Fileopen”. Zmiany odczytują proces i przechowywał go w symbolu „%s” ciągów ciągu. Ten konkretny symbol jest wywoływany w metodzie PrintF wraz z argumentem „linii”. Po utworzeniu przetworzonej rury, z funkcją pCLOMED, ​​proces rurociąg.

#włączać
int main ()

Plik *plikleopen;
linia char [130];
Fileopen = popen („ls -l”, „r”);
while (zwłoki (linia, sizeof linia, fileopen))

printf („%s”, linia);

pClose (FileOpen);

Funkcja popen programu C rozwidliła powyższy proces, a następnie utworzył rury. Teraz wykonaliśmy przetworzoną rurę strumienia w skorupce za pomocą polecenia kompilacji C. Dane wyjściowe wymieniono wszystkie pliki w katalogu „Home”, ponieważ wykonaliśmy program w tym katalogu.

Przykład 2

W poprzednim programie Popen mamy prostą demonstrację funkcjonalności programu Popen, który jest używany do rufowego procesu przesyłania strumieniowego plików. Teraz wzięliśmy kolejny przykład funkcji popen, w którym opanowaliśmy proces w trybie zapisu. Rozważmy program z główną funkcją. Konstruowaliśmy zmienną wskaźnika pliku w głównej funkcji jako „plik”. Wskaźnik pliku jest wdrażany z funkcją Popen.

Funkcja Popen przyjmuje polecenie „CAT” i „W” w trybie zapisu. Tutaj każdy argument pliku jest sekwencyjnie odczytany i wysyłany do standardowego wyjścia przez polecenie CAT. W korpusie dla pętli wykorzystaliśmy funkcję FPRINTF do wydrukowania wartości liczbowych, ponieważ określiliśmy symbol „%d”. Następnie zamknięty, proces rur popen z wywołaniem systemu pCLose.

#włączać
int main (int argc, char ** argv)
Plik *file = popen („cat”, „w”);
int x = 0;
dla (x = 0; x<5;x++)
fprintf (plik, „my count = %d \ n”, x);

pClose (plik);
powrót 0;

Kiedy wykonaliśmy powyższy proces, wydrukował wartości liczby w następujący sposób.

Przykład 3

Teraz mamy inny program, który przenosi dane jednego procesu do innego procesu. Zrobimy to z rurą z funkcji Popen. Wdrożyliśmy program za pomocą standardowych bibliotek C. Następnie mamy główną funkcję INT do wdrażania programu. Tutaj określiliśmy ciąg w funkcji SprintF z argumentem „bufor”. Funkcja SprintF () utrzymuje wynik w buforze char dostarczonym przez SprintF, zamiast wysyłać go do podpowiedzi.

Następnie nazwaliśmy funkcję popen w zmiennej „odczyt”. Tam mamy dwa procesy w funkcji popen. „WC -C” jest pierwszym procesem, który służy do zliczenia dostarczonych znaków, a drugim procesem jest „W”, który wskazuje, że rura jest otwarta w trybie pisania. Następnie mamy funkcję „fwrite”, która używa rury do zapisywania danych. Dane zostaną odebrane przez „WC”, a następnie policzy znak i wyświetlone w skorupce.

#włączać
#włączać
#włączać
#włączać
int main ()

Plik *odczyt;
Char Buffer [50];
Sprintf (bufor, „Linux System Call”);
read = Popen („wc -c”, „w”);
fwrite (bufor, sizeof (char), strlen (bufor), odczyt);
pcLose (czytaj);

Znaki wyświetlane w wierszu to „17”, ponieważ określony powyżej ciąg zawiera znaki „17”. Proces „WC -C” odczytuje te znaki i drukuje je jako wyjście.

Przykład 4

Powyższy przykład Popen wysyła dane z jednego procesu do drugiego. Tutaj otrzymamy dane z jednego procesu do drugiego procesu za pośrednictwem rury. Główną funkcją programu jest konstruowanie bufora, który przyjmuje wartości „50”. Następnie utworzyliśmy zmienną „R”, w której funkcja popen stworzyła proces. Proces „LS” służy do wyświetlania plików katalogu oraz procesu „R” do odczytu danych z rury. Proces „LS” przesyła dane do procesu „R” do odczytu. Następnie mamy funkcję Mleka, która odczytuje dane i przechowuje dane w buforze. Następnie instrukcja drukowania wydrukuje dane przechowywane w buforze.

#włączać
#włączać
#włączać
#włączać
int main ()

Plik *r;
Char Buffer [50];
r = popen („ls”, „r”);
migotanie (bufor, 1, 25, r);
printf („%s \ n”, bufor);
pcLose (r);

Tutaj wyświetlane są tylko „50” znaki istniejących plików z katalogu roboczego. Dlatego wyjście będzie miało tylko 50 znaków.

Wniosek

Podaliśmy szczegółową demonstrację połączeń systemowych Linux Popen w języku C. Wdrożyliśmy cztery przykłady, w których wdrożyliśmy funkcję Popen. Funkcja popen zwraca strumień rury zgodnie z przypisanym trybem. W przykładach użyliśmy zarówno trybu odczytu, jak i zapisu z funkcjami obsługi plików. Użyliśmy nazwy programu w funkcji Popen () jako jego pierwszego argumentu. Drugim argumentem jest plik „R” jako odczyt lub „w” jako tryb zapisu.