/* More correct and illustrative variant */

#include <glib.h>

void
setup_first (gpointer data)
{
  int *p = (int *) data;
  dup2 (p[1], 1);
  close (p[0]);
}

void
setup_second (gpointer data)
{
  int *p = (int *) data;
  dup2 (p[0], 0);
  close (p[1]);
}

int
main ()
{
  char *argv1[] = { "/bin/ls", NULL };
  char *argv2[] = { "/usr/bin/wc", "-l", NULL };
  GError *err = NULL;

  gint p[2];

  pipe (p);

  g_spawn_async_with_pipes (NULL, argv1, NULL,
                            G_SPAWN_LEAVE_DESCRIPTORS_OPEN,
                            setup_first, p,
                            NULL, NULL, NULL, NULL, &err);

  g_spawn_async_with_pipes (NULL, argv2, NULL, 
                            G_SPAWN_LEAVE_DESCRIPTORS_OPEN,
                            setup_second, p, NULL, 
                            NULL, NULL, NULL, &err);

  g_assert (err == NULL);

  sleep (1);

  close (p[0]);
  close (p[1]);

  return 0;
}


_______________________________________________
gnome-devel-list mailing list
gnome-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gnome-devel-list

Reply via email to