Poiché l'output andrà a stderr
devi reindirizzare stderr
così:
FILE* file = popen("ntpdate 2>&1", "r");
questo reindirizzerà stderr
a stdout
e quindi vedrai l'output di entrambi. Seconda edizione fscanf
si fermerà al primo spazio in modo da poterlo sostituire con fgets
:
fgets(buffer, 100, file);
Come correttamente diagnosticato da Shafik Yaghmour, l'output che vedi da ntpdate
è scritto (correttamente) nel suo errore standard, che è lo stesso dell'errore standard del tuo programma.
Per ottenere i messaggi di errore inviati lungo la pipe, usa:
FILE *file = popen("ntpdate 2>&1", "r");
Questo invia l'output dell'errore standard da ntpdate
allo standard output del comando, che è la pipe da cui stai leggendo.
Ovviamente, sembra che si usi ntpdate
non funzionerà bene finché non avrai configurato qualcosa.