Puisque la sortie va à stderr
vous devez rediriger stderr
comme ça :
FILE* file = popen("ntpdate 2>&1", "r");
cela redirigera stderr
à stdout
et ainsi vous verrez la sortie des deux. Deuxième numéro fscanf
s'arrêtera au premier espace pour que vous puissiez remplacer par fgets
:
fgets(buffer, 100, file);
Comme Shafik Yaghmour l'a correctement diagnostiqué, la sortie que vous voyez de ntpdate
est écrit (correctement) dans son erreur standard, qui est la même que l'erreur standard de votre programme.
Pour obtenir les messages d'erreur envoyés dans le tube, utilisez :
FILE *file = popen("ntpdate 2>&1", "r");
Cela envoie la sortie d'erreur standard de ntpdate
à la sortie standard de la commande, qui est le tube à partir duquel vous lisez.
Bien sûr, cela ressemble à l'utilisation de ntpdate
ne fonctionnera pas bien tant que vous n'aurez pas configuré quelque chose.