Récupérer la sortie standard d’un programme

Problème

Vous voulez récupérer la sortie standard d’un programme externe que vous lancez.

Solution

Utilisez une fonction g_spawn_*() de glib ou créez un tube que vous redirigez vers la sortie standard du programme lancé.

Discussion

Voici un exemple qui utilise g_spawn_async_with_pipes() pour exécuter la commande ls :


void 
gls (void) 
{ 
  GPid pid; 
  char *args[] = { "/bin/ls", "-l", "/tmp/", NULL }; 
  int fd; 
  GError *err = NULL; 
  int l; 
  char tmp[1024]; 
/* Exécution de la commande ls. */ 
  if (!g_spawn_async_with_pipes 
      (NULL, args, NULL, 0, NULL, NULL, &pid, NULL, &fd, NULL, &err) 
      && err) 
    { 
      fprintf (stderr, 
               "g_spawn_async_with_pipes() n'a pas fonctionné (%s)\n", 
               err->message); 
      exit (EXIT_FAILURE); 
    } 
/* Lecture du résultat de la commande ls dans le tube fd. */ 
  while (0 < (l = read (fd, tmp, 1023))) 
    { 
      tmp[l] = '\0'; 
      printf ("%s", tmp); 
      if (1024 != l) 
        break; 
    } 
  close (fd); 
}
 

Voici le même exemple, mais sans l’utilisation de glib. Remarquez que la boucle de lecture est la même puisque nous lisons dans un tube. Cependant, avec g_spawn_async_with_pipes() et les fonctions de la même famille de glib, il n’y a pas à lire le code retour du processus ainsi lancé avec...

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Récupérer le code de retour d'un programme qui s'est terminé
Suivant
Récupérer les arguments passés sur la ligne de commande