redirect stdin when using execl

Phil Cornes pc at cs.keele.ac.uk
Fri Jun 9 00:54:15 AEST 1989


>From article <414 at sc50.UUCP>, by ron at sc50.UUCP ( Ron Winnacott ):
> Hello net.
> 
> Can anyone tell me how to redirect stdin when I use execl to 
> start a new program. The problem I am haveing is this, I am writing
> a C program that forks then execl's a new program, But I need to 
> use a redirect "<" in the execl call.
> 
> execl("/bin/mail","mail","ron","<","/tmp/tfile",NULL);
> 

The  exec() system call does not know anything about I/O redirection, that is
all dealt with by the shell. If you want to redirect the input of mail as above
then you will have to do it yourself in between your fork() call and your
execl() call, something like this:

    if (fork())
    {
        /* parent code */
    }
    else
    {
        close(0);                      /* close child input */
        open("/tmp/tfile",O_RDONLY);   /* open() takes the first available
                                           file descriptor - here 0 - so any
                                          subsequent stdin reads will come
                                          from the file /tmp/tfile */
        execl("/bin/mail","mail","ron",NULL);    /* open file descriptors are
                                                     preserved across exec() */
    }



More information about the Comp.unix.wizards mailing list