How do I make a circular pipe?

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

  • Next message: Alexander Viro: "Re: EXPORT_SYMBOL for chrdev_open 2.4.3"

    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 : Fri Apr 13 2001 - 21:15:26 EDT