redirect stdin when using execl
Dave Jones
djones at megatest.UUCP
Sat Jun 10 08:31:11 AEST 1989
> In article <414 at sc50.UUCP> ron at sc50.UUCP ( Ron Winnacott ) writes:
>>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.
>>
Under BSD Unix, you use dup2.
(All you folks who want only to see complete, production quality,
QA-tested code, wine-soaked and sugar-cured, shut your eyes quick!)
It goes something like this:
if((pid = fork()) == 0)
{
/* This the the spawned process. */
int file_descriptor = open("foo/bar", "r");
if(file_descriptor == -1)
{
perror("foo/bar");
_exit(-1);
}
else
{
dup2(file_descriptor,0); /* make it the standard input */
close(file_descriptor);
/* Here, close any of the parent process's file-descriptors that
* will not be used by this process..
*/
/* and now... */
execl("prog", "arg0", /* etc */ (char*)0);
/* It's an error if we get to here.... */
/* etc.. */
_exit(-1);
}
}
else
{ if(pid != -1)
{ /* provide for "reaping" the process. */
/* See man page for "wait" */
}
else
{ /* Could not execl the program... */
}
}
More information about the Comp.unix.wizards
mailing list