GNU/Linux >> Znalost Linux >  >> Linux

C:Příkaz Linux spuštěný funkcí popen() nezobrazuje výsledky

Protože výstup bude stderr musíte přesměrovat stderr takhle:

FILE* file = popen("ntpdate 2>&1", "r");

toto přesměruje stderrstdout 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.


Linux
  1. Jak uložit výstup příkazu do souboru v Linuxu

  2. Příklady příkazů času Linux

  3. Spuštění linuxového příkazu z pythonu

  1. Jak přiřadit výstup příkazu Linux k proměnné

  2. ntpdate:příkaz nenalezen

  3. fflush() v Linuxu nefunguje

  1. Příklady příkazů tee v Linuxu

  2. Výstup příkazu Linux jako parametr jiného příkazu

  3. Vytisknout md5součet výsledků příkazu find v Linuxu