GNU/Linux >> LINUX-Kenntnisse >  >> Linux

C:Von der Funktion popen() ausgeführter Linux-Befehl zeigt keine Ergebnisse an

Da die Ausgabe an stderr geht Sie müssen stderr umleiten etwa so:

FILE* file = popen("ntpdate 2>&1", "r");

dadurch wird stderr umgeleitet bis stdout und so sehen Sie die Ausgabe von beiden. Zweite Ausgabe fscanf stoppt beim ersten Leerzeichen, sodass Sie es durch fgets ersetzen können :

fgets(buffer, 100, file);

Da Shafik Yaghmour richtig diagnostiziert hat, sehen Sie die Ausgabe von ntpdate wird (korrekt) in seinen Standardfehler geschrieben, der der Standardfehler Ihres Programms ist.

Um die Fehlermeldungen zu erhalten, die über die Pipe gesendet werden, verwenden Sie:

FILE *file = popen("ntpdate 2>&1", "r");

Das sendet die Standardfehlerausgabe von ntpdate zur Standardausgabe des Befehls, das ist die Pipe, aus der Sie lesen.

Natürlich sieht es so aus, als würde man ntpdate verwenden wird nicht gut funktionieren, bis Sie etwas konfiguriert haben.


Linux
  1. So weisen Sie einer Variablen die Ausgabe eines Linux-Befehls zu

  2. Linux – Kopfhörer funktioniert nicht Linux Mint 18?

  3. Beispiele für Linux-Zeitbefehle

  4. Gibt md5sum der Ergebnisse eines Find-Befehls in Linux aus

  5. fflush() funktioniert nicht unter Linux

8 Linux-Tee-Befehl mit Beispielen

iftop-Befehl unter Linux

lsblk-Befehl unter Linux

Fehlerbehebung „Bash:Command Not Found“-Fehler in Linux

Beispiele für Linux-Echo-Befehle

Linux SCP-Befehl zum sicheren Übertragen von Dateien