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.