Linux Popen -System -Anruf in C

Linux Popen -System -Anruf in C

Die Funktion popen () führt den Befehl aus, der durch den Befehl der Zeichenfolge angegeben ist. Die Funktion sollte einen Zeiger in einen Stream zurückgeben, der zum Lesen oder Schreiben in die Pipe verwendet wird und gleichzeitig ein Rohr zwischen der aufrufenden Anwendung und dem ausgeführten Befehl erstellt. Die Popen -Funktion ist in der Standardbibliothek der E/A -Funktion verfügbar und erzeugt einen zweiten Prozess, um einen Terminalbefehl auszuführen. Die offene Phase des Popen () entspricht der offenen Phase in der Funktion fopen (). Die Funktion popen () initiiert einen Prozess, indem die Hülle gegabelt, ein Rohr errichtet und die Shell ausgeführt wird. Da ein Rohr standardmäßig unidirektional ist; Infolgedessen ist der Stream entweder schreibgeschützt oder nur Schreibschreiber. Bei der erfolgreichen Ausführung der Popen () -Funktion wird ein offener Strom erhalten, der für das Lesen und Schreiben des Rohrs verwendet wird.”

Beispiel 1

Mit dem folgenden Beispielprogramm lesen wir die Dateien, die im aktuellen Verzeichnis oder im Ordner vorhanden sind, mit dem Popen -Systemaufruf. Erstens haben wir das Stdio eingegeben.H Header -Datei der C -Standardbibliothek. Anschließend haben wir eine Programm -Int main () -Funktion, in der wir die Popen -Funktion bereitgestellt haben. Zuvor haben wir die Zeigervariable "FileOpen" aus der Klasse "Datei" erstellt. Die Zeigervariable der Datei gibt das nachfolgende Byte an, um zu lesen oder zu schreiben.

Danach haben wir den Grenzwert des Charakters zugewiesen, um zu lesen. Die Variable "FilePen" hat dann die Funktion "Popen" aufgerufen. Die Funktion „Popen“ übernimmt den Befehl „LS -L“ von Linux, in dem alle Dateien des aktuellen Verzeichnisses aufgeführt sind. Darüber hinaus haben wir den Parameter „R“ in der Popen -Funktion eingegeben, die den Lesemodus angibt.

Hier haben wir den Lesenprozess mit der Popenfunktion verwendet. Als nächst. Die while -Schleife verwendet die FGETS -Methoden, die die Argumente „Zeile“, „Größe der Zeile“ und „FilePen“ übernehmen, und „FilePen“. Die FGets lesen den Piped -Prozess und speicherten ihn in das Symbol „%S“ von String. Dieses bestimmte Symbol wird in der Printf -Methode zusammen mit dem Argument „Zeilen“ aufgerufen. Sobald wir das verarbeitete Rohr mit der pCLOSED -Funktion erstellt haben, kann der Rohrleitungsvorgang wie am Ende des folgenden Programms geschlossen werden.

#enthalten
int main ()

Datei *FileOpen;
Char Line [130];
FileOpen = popen ("ls -l", "r");
while (fGets (Zeile, Sizeof Line, FileOpen))

printf ("%s", Linie);

pclose (fileOpen);

Die Popenfunktion des C -Programms hat den obigen Vorgang geblieben und dann das Rohr erstellt. Jetzt haben wir das verarbeitete Rohr des Stroms in der Schale mit dem Befehl c Compilation ausgeführt. Die Ausgabe hat alle Dateien im Verzeichnis „Home“ aufgelistet, da wir das Programm in diesem Verzeichnis ausgeführt haben.

Beispiel 2

Im vorherigen Popen -Programm haben wir eine einfache Demonstration der Funktionalität des Popen -Programms. Jetzt haben wir ein weiteres Beispiel für die Popen -Funktion genommen, in der wir den Vorgang mit dem Schreibmodus geleitet haben. Betrachten wir das Programm mit der Hauptfunktion. Wir haben die Dateizeigervariable in der Hauptfunktion als "Datei" konstruiert. Der Dateizeiger wird mit der Popen -Funktion bereitgestellt.

Die Popen -Funktion nimmt den Befehl „Cat“ und den „W“ für den Schreibmodus an. Hier wird jedes Dateiargument nacheinander gelesen und von dem CAT -Befehl an die Standardausgabe gesendet. In der für Schleifenkörper haben wir die FPRINTF -Funktion verwendet, um die numerischen Zählwerte zu drucken, da wir das Symbol „%d“ angegeben haben. Dann geschlossen, der Pop -Rohrprozess mit dem PCLOSE -Systemaufruf.

#enthalten
int main (int argc, char ** argv)
Datei *file = popen ("cat", "w");
int x = 0;
für (x = 0; x<5;x++)
fprintf (Datei "my count = %d \ n", x);

pclose (Datei);
Rückkehr 0;

Als wir den oben erstellten Prozess ausführten, druckte er die Zählwerte auf folgende Weise aus.

Beispiel 3

Jetzt haben wir ein weiteres Programm, das die Daten eines Prozesses in einen anderen Prozess überträgt. Wir werden dies mit der Pipe aus der Popenfunktion tun. Wir haben das Programm mit den Standardbibliotheken von C implementiert. Dann haben wir eine INT -Hauptfunktion für die Bereitstellung eines Programms. Hier haben wir die Zeichenfolge in der Sprintf -Funktion mit dem Argument „Puffer“ angegeben. Die Sprintf () -Funktion hält das Ergebnis auf dem von Sprintf bereitgestellten Zeichenpuffer, anstatt es an die Eingabeaufforderung zu senden.

Danach haben wir die Popen -Funktion in der Variablen „Lese“ bezeichnet. Dort haben wir zwei Prozesse in der Popenfunktion. Der „WC -C“ ist der erste Prozess, der zum Zählen der bereitgestellten Zeichen verwendet wird, und der zweite Vorgang ist das „W“, das angibt, dass das Rohr im Schreibmodus geöffnet ist. Danach haben wir die Funktion „FWrite“, die das Rohr zum Schreiben von Daten verwendet. Die Daten werden vom „WC“ empfangen, dann das Zeichen gezählt und in der Shell angezeigt.

#enthalten
#enthalten
#enthalten
#enthalten
int main ()

Datei *lesen;
Zeichenpuffer [50];
Sprintf (Puffer, "Linux -Systemaufruf");
read = popen ("wc -c", "w");
fWrite (Puffer, sizeof (char), strlen (puffer), read);
pclose (read);

Die in der Eingabeaufforderung angezeigten Zeichen sind „17“, da die oben angegebene Zeichenfolge „17“ Zeichen enthält. Der "WC -C" -Prozess liest diese Zeichen und druckt sie als Ausgabe aus.

Beispiel 4

Das obige Beispiel von Popen sendet die Daten von einem Prozess an einen anderen. Hier erhalten wir die Daten von einem Prozess zum anderen Prozess über ein Rohr. Die Hauptfunktion des Programms besteht darin, den Puffer zu konstruieren, der „50“ -Werte erfordert. Dann haben wir die Variable „R“ erstellt, in der die Popen -Funktion den Prozess erstellt hat. Der „LS“ -Prozess wird verwendet, um die Dateien des Verzeichnisses aufzulisten, und den „R“ -Prozess zum Lesen der Daten aus der Pipe. Der "LS" -Prozess überträgt die Daten in den zu lesen "R" -Prozess. Danach haben wir die freie Funktion, die die Daten liest und die Daten im Puffer speichert. Anschließend werden die im Puffer gespeicherten Daten gedruckt.

#enthalten
#enthalten
#enthalten
#enthalten
int main ()

Datei *r;
Zeichenpuffer [50];
r = popen ("ls", "r");
Fread (Puffer, 1, 25, R);
printf ("%S \ n", Puffer);
pclose (r);

Hier werden nur „50“ Zeichen der vorhandenen Dateien aus dem Arbeitsverzeichnis angezeigt. Daher hat der Ausgang nur 50 Zeichen.

Abschluss

Wir haben eine detaillierte Demonstration von Linux -Popen -Systemaufrufen in C -Sprache gegeben. Wir haben vier Beispiele implementiert, in denen wir die Popen -Funktion bereitgestellt haben. Die Popen -Funktion gibt den Rohrstrom gemäß dem von uns zugewiesenen Modus zurück. In den Beispielen haben wir sowohl den Lese- als auch den Schreibmodus mit den Dateibehandlungsfunktionen Freene und FWrite verwendet. Wir haben den Namen des Programms in der Funktion popen () als erstes Argument verwendet. Das zweite Argument ist eine Datei "R" als Lesen oder "W" als Schreibmodus.