#include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdio.h> #include <errno.h> #include <stdlib.h> #include "makeargv.h" int main(int argc, char *argv[]){ char **myargv, delim[] = " \t"; pid_t childpid, waitreturn; int status; if (argc != 2) { fprintf(stderr, "Usage: %s string\n", argv[0]); exit(EXIT_FAILURE); } if ((childpid = fork()) == -1) { perror("The fork failed"); exit(EXIT_FAILURE); } else if (childpid == 0) { /* child code */ if (makeargv(argv[1], delim, &myargv) < 0) { fprintf(stderr, "Argument array could not be constructed\n"); exit(EXIT_FAILURE); } else if (execvp(myargv[0], &myargv[0]) < 0) { perror("The exec of command failed"); exit(EXIT_FAILURE); } } else /* parent code */ while(childpid != (waitreturn = wait(&status))) if ((waitreturn == -1) && (errno != EINTR)) break; exit(EXIT_SUCCESS); }