Envoyer des données sur l’entrée standard d’un programme

Problème

Vous souhaitez écrire sur l’entrée standard d’un programme que vous avez lancé. 

Solution

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

Discussion

Cette recette est semblable à la recette "Récupérer la sortie standard d’un programme". Référez-vous y pour la discussion. Voici cependant deux exemples, l’un utilisant glib et l’autre non, qui comptent le nombre de lignes et l’affichent via la sortie standard du programme lancé.


void 
gwc (void) 
{ 
  GPid pid; 
  char *args[] = { "/usr/bin/wc", "-l", NULL }; 
  int fd; 
  GError *err = NULL; 
  int i; 
  char tmp[1024]; 
/* Exécution de la commande wc. */ 
  if (!g_spawn_async_with_pipes 
      (NULL, args, NULL, 0, NULL, NULL, &pid, &fd, NULL, NULL, &err) 
      && err) 
    { 
      fprintf (stderr, 
               "g_spawn_async_with_pipes() n'a pas fonctionné (%s)\n", 
               err->message); 
      exit (EXIT_FAILURE); 
    } 
/* Envoi de lignes à la commande wc dans le tube fd. */ 
  for (i = 0; i < 100; i++) 
    { 
      snprintf (tmp, sizeof(tmp), "%d\n", i); 
      write (fd, tmp, strlen (tmp)); 
    } 
  close (fd); 
}
void 
wc (void) 
{ 
  int fd[2]; 
  int pid; ...
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 les arguments passés sur la ligne de commande
Suivant
Lire une chaîne de caractères depuis l'entrée standard