Finally, The exec() System Call
This lesson demonstrates and describes an example of the `exec()` system call.
We'll cover the following...
A final and important piece of the process creation API is the exec()
system call.
Running p3.c
This system call is useful when you want to run a program that is different from the calling program. For example, calling fork()
in p2.c
is only useful if you want to keep running copies of the same
in the program. However, often you want to run a different program; exec()
does just that (see the code below).
Press + to interact
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/wait.h>int main(int argc, char *argv[]){printf("hello world (pid:%d)\n", (int) getpid());fflush(stdout);int rc = fork();if (rc < 0) {// fork failed; exitfprintf(stderr, "fork failed\n");exit(1);} else if (rc == 0) {// child (new process)printf("hello, I am child (pid:%d)\n", (int) getpid());fflush(stdout);char *myargs[3];myargs[0] = strdup("wc"); // program: "wc" (word count)myargs[1] = strdup("p3.c"); // argument: file to countmyargs[2] = NULL; // marks end of arrayexecvp(myargs[0], myargs); // runs word countprintf("this shouldn't print out");} else {// parent goes down this path (original process)int wc = wait(NULL);printf("hello, I am parent of %d (wc:%d) (pid:%d)\n",rc, wc, (int) getpid());}return 0;}
In this example, the child ...