Dado que la salida va a stderr
necesitas redirigir stderr
así:
FILE* file = popen("ntpdate 2>&1", "r");
esto redirigirá a stderr
a stdout
y entonces verá la salida de ambos. Segundo número fscanf
se detendrá en el primer espacio para que pueda reemplazarlo con fgets
:
fgets(buffer, 100, file);
Como Shafik Yaghmour diagnosticó correctamente, el resultado que ve en ntpdate
está escrito (correctamente) en su error estándar, que es el mismo que el error estándar de su programa.
Para obtener los mensajes de error enviados por la tubería, use:
FILE *file = popen("ntpdate 2>&1", "r");
Eso envía la salida de error estándar de ntpdate
a la salida estándar del comando, que es la tubería desde la que está leyendo.
Por supuesto, parece usar ntpdate
no funcionará bien hasta que haya configurado algo.