Loading .idea/.name 0 → 100644 +1 −0 Original line number Diff line number Diff line coms352_shell No newline at end of file main.c +35 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,10 @@ int main() { exit(EXIT_SUCCESS); } char *doMore = strchr(readBuff, '|'); if (doMore != NULL) { readBuff = strtok(readBuff, "|"); } char **tokens = malloc(sizeof(char) * 5000); int numTokens = tokenize(readBuff, tokens); char *lastToken = tokens[numTokens - 2]; Loading Loading @@ -114,13 +118,29 @@ int main() { storeHist(readBuff, &historyPos, historyBuff); int runInBackground = 0; int doMoreCheck = 0; if (doMore != NULL) { doMoreCheck = 1; } if (strcmp(lastToken, "&") == TRUE) { runInBackground = 1; tokens[numTokens - 2] = NULL; } int thePipe[2]; if (pipe(thePipe) != 0) { fprintf(stderr, "Unable to create the pipe. Aborting."); exit(EXIT_FAILURE); } if (fork() == 0) { if (doMoreCheck != 0) { close(STDOUT_FILENO); dup(thePipe[1]); close(thePipe[0]); } int returnCode = execvp(tokens[0], tokens); close(thePipe[1]); if (returnCode == -1) { fprintf(stdout, "bsh: Command not found\n"); } Loading @@ -129,6 +149,21 @@ int main() { wait(NULL); } } // Do if more fork, otherwise short cricut and move on with life if (doMoreCheck != 0 && fork() == 0) { close(STDIN_FILENO); dup(thePipe[0]); close(thePipe[1]); char* moreCmd[] = {"more"}; execvp(moreCmd[0], moreCmd); close(thePipe[0]); exit(EXIT_SUCCESS); } else if (doMoreCheck != 0) { // wait(NULL); } free(tokens); } } Loading tokenize.c +4 −1 Original line number Diff line number Diff line Loading @@ -7,7 +7,8 @@ /// Takes in the user input and tokenizes it /// /// \param string user input /// \param output /// \param output tokens /// \param pipe does the command need to be piped to more /// \return number of tokens int tokenize(char *string, char **output) { // Make strtok thread safe Loading @@ -26,5 +27,7 @@ int tokenize(char *string, char **output) { output[i] = token; i++; } // Return token count return i; } Loading
.idea/.name 0 → 100644 +1 −0 Original line number Diff line number Diff line coms352_shell No newline at end of file
main.c +35 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,10 @@ int main() { exit(EXIT_SUCCESS); } char *doMore = strchr(readBuff, '|'); if (doMore != NULL) { readBuff = strtok(readBuff, "|"); } char **tokens = malloc(sizeof(char) * 5000); int numTokens = tokenize(readBuff, tokens); char *lastToken = tokens[numTokens - 2]; Loading Loading @@ -114,13 +118,29 @@ int main() { storeHist(readBuff, &historyPos, historyBuff); int runInBackground = 0; int doMoreCheck = 0; if (doMore != NULL) { doMoreCheck = 1; } if (strcmp(lastToken, "&") == TRUE) { runInBackground = 1; tokens[numTokens - 2] = NULL; } int thePipe[2]; if (pipe(thePipe) != 0) { fprintf(stderr, "Unable to create the pipe. Aborting."); exit(EXIT_FAILURE); } if (fork() == 0) { if (doMoreCheck != 0) { close(STDOUT_FILENO); dup(thePipe[1]); close(thePipe[0]); } int returnCode = execvp(tokens[0], tokens); close(thePipe[1]); if (returnCode == -1) { fprintf(stdout, "bsh: Command not found\n"); } Loading @@ -129,6 +149,21 @@ int main() { wait(NULL); } } // Do if more fork, otherwise short cricut and move on with life if (doMoreCheck != 0 && fork() == 0) { close(STDIN_FILENO); dup(thePipe[0]); close(thePipe[1]); char* moreCmd[] = {"more"}; execvp(moreCmd[0], moreCmd); close(thePipe[0]); exit(EXIT_SUCCESS); } else if (doMoreCheck != 0) { // wait(NULL); } free(tokens); } } Loading
tokenize.c +4 −1 Original line number Diff line number Diff line Loading @@ -7,7 +7,8 @@ /// Takes in the user input and tokenizes it /// /// \param string user input /// \param output /// \param output tokens /// \param pipe does the command need to be piped to more /// \return number of tokens int tokenize(char *string, char **output) { // Make strtok thread safe Loading @@ -26,5 +27,7 @@ int tokenize(char *string, char **output) { output[i] = token; i++; } // Return token count return i; }