Protože výstup bude stderr musíte přesměrovat stderr takhle:
FILE* file = popen("ntpdate 2>&1", "r");
toto přesměruje stderr až stdout a tak uvidíte výstup z obou. Druhé vydání fscanf se zastaví na první mezerě, takže můžete nahradit fgets :
fgets(buffer, 100, file);
Jak Shafik Yaghmour správně diagnostikoval, výstup vidíte z ntpdate je zapsán (správně) do své standardní chyby, která je stejná jako standardní chyba vašich programů.
Chcete-li, aby se chybové zprávy odeslaly, použijte:
FILE *file = popen("ntpdate 2>&1", "r");
To odešle standardní chybový výstup z ntpdate na standardní výstup příkazu, což je roura, ze které čtete.
Samozřejmě to vypadá na použití ntpdate nebude fungovat dobře, dokud něco nenakonfigurujete.
Při použití data příkazu linux přidejte určitý čas
Nastavení/změna atributu ctime nebo Change time u souboru