Du kannst die Ausgabe nach Ausführung eines Skripts mittels eines Pipes erhalten. Pipes werden verwendet, wenn wir die Ausgabe des Kindprozesses möchten.
int my_func() {
char ch;
FILE *fpipe;
FILE *copy_fp;
FILE *tmp;
char *command = (char *)"/usr/bin/my_script my_arg";
copy_fp = fopen("/tmp/output_file_path", "w");
fpipe = (FILE *)popen(command, "r");
if (fpipe) {
while ((ch = fgetc(fpipe)) != EOF) {
fputc(ch, copy_fp);
}
}
else {
if (copy_fp) {
fprintf(copy_fp, "Sorry there was an error opening the file");
}
}
pclose(fpipe);
fclose(copy_fp);
return 0;
}
Hier ist also das Skript, das du ausführen möchtest. Setze es in einer Befehlsvariable mit den Argumenten, die dein Skript benötigt (nichts, wenn keine Argumente). Und die Datei, in der du die Ausgabe des Skripts erfassen möchtest, packe es in copy_fp.
Also führt das popen dein Skript aus und legt die Ausgabe in fpipe ab und dann kannst du einfach alles davon in deine Ausgabedatei kopieren.
Auf diese Weise kannst du die Ausgaben von Kindprozessen erfassen.
Und ein weiterer Prozess ist, dass du den >
Operator direkt im Befehl platzieren kannst. Also wenn wir alles in eine Datei schreiben, während wir den Befehl ausführen, musst du nichts kopieren.
In diesem Fall gibt es keinen Bedarf, Pipes zu verwenden. Du kannst einfach system
verwenden und es wird den Befehl ausführen und die Ausgabe in diese Datei legen.
int my_func(){
char *command = (char *)"/usr/bin/my_script my_arg > /tmp/my_putput_file";
system(command);
printf("everything saved in my_output_file");
return 0;
}
Du kannst den YoLinux Tutorial: Fork, Exec und Prozesskontrolle für weitere Informationen lesen.
3 Stimmen
Auch siehe Antworten in dieser Frage:
https://stackoverflow.com/questions/52164723/how-to-execute-a-command-and-get-return-code-stdout-and-stderr-of-command-in-c
für eine Erweiterung der großartigen Antwort unten, die Methoden zum Abrufen desRückgabecodes
und vonstderr
sowiestdout
bereitstellt, die diese Antwort bereits erklärt.8 Stimmen
@code_fodder Sie können einen Link zu stackoverflow.com/questions/52164723/… erstellen.
1 Stimmen
Hier sind 5 Fragen und Antworten für C und/oder C++, die dieses Thema betreffen: 1) wie man aus stdout in C liest, 2) C: Führen Sie ein Systemkommando aus und erhalten Sie die Ausgabe?, 3) Wie kann ich ein externes Programm aus C heraus ausführen und seine Ausgabe analysieren?, 4) Optimales Erfassen von stdout aus einem system() Befehl, 5) (diese Frage).