/*-------------------------------------------------------------------*/ /* textforkexec.c */ /* The fork and exec system calls. */ /*-------------------------------------------------------------------*/ #include #include #include #define MAX_COMMAND_SIZE 1024 int main(int argc, char *argv[]) { int iPid; char pcCommandName[MAX_COMMAND_SIZE]; printf("Enter a command (no arguments, exit to stop): "); scanf("%s", pcCommandName); while (strcmp(pcCommandName, "exit") != 0) { iPid = fork(); if (iPid == -1) { printf("Failed to execute fork.\n"); exit(1); } if (iPid == 0) { char *ppcArgv[2]; ppcArgv[0] = pcCommandName; ppcArgv[1] = NULL; execvp(ppcArgv[0], ppcArgv); printf("Failed to execute execvp.\n"); /* Should never reach. */ exit(1); /* Should never reach. */ } printf("Enter a command (no arguments, exit to stop): "); scanf("%s", pcCommandName); } return 0; } /* Sample execution: $ testforkexec Enter a command (no arguments, exit to stop): hello Enter a command (no arguments, exit to stop): Hello world. date Enter a command (no arguments, exit to stop): Sat Dec 8 18:04:49 EST 2001 exit $ */ /* Note: Malformed! Why? */