How do I make a circular pipe?

From: Rob Landley (telomerase@yahoo.com)
Date: Fri Apr 13 2001 - 20:05:04 EST


How do I do the following:

# --> pppd notty | pppoe -I eth1 | --
   |_________________________________|

I.E. connect the stdout of a process (or chain
thereof) to its own stdin?

So I wrote a program to do it, along the lines of:

sixty-nine /bin/sh -c "pppd notty | pppoe -I eth1"

With an executable approximately along the lines of
(warning, pseudo-code, the other machine isn't hooked
up to the internet at the moment for obvious reasons):

int main(int argc, char *argv[], char *envp[])
{
  int fd[2];
  pipe(fd);
  dup2(fd[0],0);
  dup2(fd[0],1);
  execve(argv[1],argv+1,envp);
  fprintf(stderr,"Bad.\n");
  exit(1);
}

And it didn't work. I made a little test program that
writes to stdout and reads from stdin and reports to
stderr, and it gets nothing. Apparently, the pipe
fd's evaporate when the process does an execve.

What do I do? (If anybody else knows an easier way to
get pppoe working, that would be helpful too.

Rob

(P.S. WHY does pppd want to talk to a tty by default
instead of stdin and stdout? Were the people who
wrote it at all familiar with the unix philosophy?
Just curious...)

__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail.
http://personal.mail.yahoo.com/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Apr 15 2001 - 21:00:22 EST