Heim >Backend-Entwicklung >C++ >Wie kann ich stdout von einem system()-Befehl in C/C erfassen?

Wie kann ich stdout von einem system()-Befehl in C/C erfassen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-10 02:51:09937Durchsuche

How Can I Capture stdout from a system() Command in C/C  ?

Standardausgabe von einem system()-Befehl in C/C erfassen

Beim Ausführen eines Systembefehls mit system() ist es wichtig, Folgendes zu tun Erfassen Sie die Ausgabe zur weiteren Verarbeitung. C/C bietet verschiedene Ansätze, um dies zu erreichen, wobei sich die Funktion popen() als zuverlässige Lösung erwiesen hat.

Funktion popen()

Die Funktion popen() wird geöffnet eine Pipe aus der Shell und startet einen Prozess durch Ausführen des angegebenen Befehls. Es gibt einen Stream-Zeiger FILE * zurück, der mit der Pipe verbunden ist und Lese- und Schreibvorgänge ermöglicht.

Syntax und Verwendung

Die Syntax von popen() ist wie folgt folgt:

#include <stdio.h>

FILE *popen(const char *command, const char *type);

wobei:

  • Befehl der auszuführende Systembefehl ist.
  • Typ Gibt die Art der Verbindung zur Pipe an: „r“ für Lesen oder „w“ für Schreiben.

Um die Standardausgabe eines Systembefehls zu erfassen, verwenden Sie:

FILE *fp = popen(command, "r");

Die Datei *fp stellt einen Stream dar, der mit der Standardausgabe des Befehls verbunden ist. Sie können dann fgetc(), fgets() oder andere Stream-Manipulationsfunktionen verwenden, um die Ausgabe zu lesen.

Beispiel

char buffer[BUFSIZ];

FILE *fp = popen("ls", "r");
while (fgets(buffer, BUFSIZ, fp) != NULL) {
    printf("%s", buffer);
}
pclose(fp);

Schließen der Pipe

Sobald Sie mit dem Lesen der Ausgabe fertig sind, ist es wichtig, die Pipe mit pclose() zu schließen, um die zugehörige Datei freizugeben Ressourcen:

int status = pclose(fp);

Hinweis: Beim Erfassen von stdout mit popen() werden alle Fehler übernommen, die vom externen Befehl festgestellt werden. Erwägen Sie, den Rückgabewert von pclose() zu überprüfen, um etwaige Fehler zu erkennen.

Das obige ist der detaillierte Inhalt vonWie kann ich stdout von einem system()-Befehl in C/C erfassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn