GNU/Linux >> Tutoriels Linux >  >> Linux

C :la commande Linux exécutée par la fonction popen() n'affiche pas les résultats

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.


Linux
  1. Comment enregistrer la sortie de la commande dans un fichier sous Linux

  2. Exemples de commande de temps Linux

  3. Exécuter une commande linux à partir de python

  4. fflush() ne fonctionne pas sous Linux

  5. Rediriger la sortie d'un bloc fonctionnel vers un fichier sous Linux

8 Commande Linux Tee avec exemples

Commande iftop sous Linux

Commande lsblk sous Linux

Dépannage de l'erreur "Bash :Commande introuvable" sous Linux

Exemples de commandes echo Linux

Commande Linux SCP pour transférer des fichiers en toute sécurité