C: Führen Sie einen Systembefehl aus und erhalten Sie die Ausgabe? [duplicate]

Lesezeit: 2 Minuten

Benutzeravatar von jimi hendrix
Jimi Hendrix

Mögliches Duplikat:

Wie kann ich ein externes Programm von C ausführen und seine Ausgabe analysieren?

Ich möchte einen Befehl in Linux ausführen und den Text dessen zurückgeben, was er ausgibt, aber ich unterlassen Sie möchten, dass dieser Text auf dem Bildschirm gedruckt wird. Gibt es einen eleganteren Weg, als eine temporäre Datei zu erstellen?

  • Schon mehrfach diskutiert.

    – dmckee — Ex-Moderator-Kätzchen

    14. März 2009 um 17:15 Uhr

  • Als dupliziert markiert, aber nicht darauf verweisen. Ich glaube nicht, dass das eine perfekte Lösung ist. Gleichzeitig sagen Sie, es sei doppelt vorhanden, Sie sollten uns darauf hinweisen. Oder besser!! Führen Sie eine Weiterleitung basierend auf der Anzahl der doppelten Reporter durch.

    – m3nda

    23. März 2015 um 7:23 Uhr


Du willst das „Popen“-Funktion. Hier ist ein Beispiel für die Ausführung des Befehls “ls /etc” und die Ausgabe an die Konsole.

#include <stdio.h>
#include <stdlib.h>


int main( int argc, char *argv[] )
{

  FILE *fp;
  char path[1035];

  /* Open the command for reading. */
  fp = popen("/bin/ls /etc/", "r");
  if (fp == NULL) {
    printf("Failed to run command\n" );
    exit(1);
  }

  /* Read the output a line at a time - output it. */
  while (fgets(path, sizeof(path), fp) != NULL) {
    printf("%s", path);
  }

  /* close */
  pclose(fp);

  return 0;
}

  • Es kann eine gute Idee sein, stderr nach stdout umzuleiten, damit Sie Fehler abfangen.

    Benutzer25148

    14. März 2009 um 17:12 Uhr

  • Wie würde ich stderr auf stdout umleiten?

    – Jimi Hendrix

    14. März 2009 um 21:06 Uhr

  • du solltest benutzen fgets(path, sizeof(path), fp) nicht sizeof(path)-1. lesen Sie das Handbuch

    – Benutzer102008

    22. Dezember 2010 um 0:25 Uhr

  • @jimi: Sie können stderr im Shell-Befehl, den Sie über popen ausführen, nach stdout umleiten, z. B. fp = popen(“/bin/ls /etc/ 2>&1”, “r”);

    – rakslice

    5. April 2011 um 22:25 Uhr

  • Es scheint eine 2-Wege-Kommunikation mit Popen zu geben. Wenn ich einen Befehl ausgebe, der den Benutzer zur Bestätigung auffordert, erhalte ich die Eingabeaufforderung. Was kann ich tun, wenn ich nur die Ausgabe lesen möchte und wenn eine Eingabeaufforderung angezeigt wird, beende ich sie einfach

    – Sachin

    13. Juli 2012 um 18:42 Uhr

Sie brauchen eine Art Interprozesskommunikation. Verwenden ein Rohr oder einen gemeinsam genutzten Puffer.

1425010cookie-checkC: Führen Sie einen Systembefehl aus und erhalten Sie die Ausgabe? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy