Using fork and exec Together

0 views
Skip to first unread message

elsiddik

unread,
Dec 21, 2007, 2:11:26 PM12/21/07
to unix
A common pattern to run a subprogram within a program is first to fork
the process and then exec the subprogram. This allows the calling
program to continue execution in the parent process while the calling
program is replaced by the subprogram in the child process.

<code>


#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include <unistd.h>



/* Spawn a child process running a new program. PROGRAM is the name

of the program to run; the path will be searched for this program.

ARG_LIST is a NULL-terminated list of character strings to be

passed as the program's argument list. Returns the process ID of

the spawned process. */



int spawn (char* program, char** arg_list)

{

pid_t child_pid;



/* Duplicate this process. */

child_pid = fork ();

if (child_pid != 0)

/* This is the parent process. */

return child_pid;

else {

/* Now execute PROGRAM, searching for it in the path. */

execvp (program, arg_list);

/* The execvp function returns only if an error occurs. */

fprintf (stderr, "an error occurred in execvp\n");

abort ();

}

}



int main ()

{

/* The argument list to pass to the "ls" command. */

char* arg_list[] = {

"ls", /* argv[0], the name of the program. */

"-l",

"/",

NULL /* The argument list must end with a NULL. */

};



/* Spawn a child process running the "ls" command. Ignore the

returned child process ID. */

spawn ("ls", arg_list);



printf ("done with main program\n");



return 0;

}

</code>



zaher el siddik

http://www.unixshells.nl/
http://elsiddik.blogspot.com/
Reply all
Reply to author
Forward
0 new messages