// // // // // // // // // // // // // // // // // // // // // // // // // // CS270 Class Example // // Author: Robert Heckendorn // University of Idaho // #include #include // for system #include // for open and open flags #include // for errno #include // for strerror #include // for getpid getppid int main() { char *args[] = {(char *)"ZERO", (char *)"ONE", (char *)"TWO", NULL}; // NULL terminated char *env[] = {(char *)"PATH=/bin", (char *)"MYVAR=nicevalue", NULL}; printf("\nBEGINNING TESTS\n"); printf("PID: %d PPID: %d\n", getpid(), getppid()); // execl, execlp, execle have a variable list of args in the call // execv, execvp, execve have a fixed length list of args in the call the last of which is char *argv[] // EXECL commands // if (execl("./pid", NULL)!=0) { // EXECL: USE LIST FORM OF ARGS ONLY // if (execl("/bin/ps", "ps", "-af", NULL)!=0) { // give full path // if (execl("ps", "ps", "-af", NULL)!=0) { // fail: local path // if (execl("/Users/meerkat/Scripts/hi", "hi", "-af", NULL)!=0) { // full path // EXECLP: USE LIST FORM OF ARGS + LOOKS UP PATH // if (execlp("ps", "ps", "-af", NULL)!=0) { // finds ps in PATH // EXECLE: USE LIST FORM OF ARGS + INCLUDE ENV if (execle("ps", "ps", "-af", NULL, env)!=0) { // fail: not given list of env // EXECV require first arg be a path // if (execv("/bin/echo", args)!=0) { // supply path and argv // if (execv("echo", args)!=0) { // fails // EXECVP uses PATH variable // if (execvp("echo", args)!=0) { // finds it if PATH include /bin // HANDLE PERROR perror("failed to exec"); } printf("BACK IN MAIN\n"); return(0); }