From 23ae7975806cf89fa10af2edfef1ac527f37996f Mon Sep 17 00:00:00 2001 From: Ansh <anshbhajjan@gmail.com> Date: Tue, 4 Mar 2025 23:52:57 -0500 Subject: [PATCH] Testing write errors --- assignments/assignment-5/starter/dsh | Bin 23464 -> 23488 bytes assignments/assignment-5/starter/dshlib.c | 184 +++++++++++++++++----- 2 files changed, 143 insertions(+), 41 deletions(-) diff --git a/assignments/assignment-5/starter/dsh b/assignments/assignment-5/starter/dsh index 3bd5b8ef487637348974bfa0bb6239633ffe36a4..122f476185ab42843e019abfc92ae7f91acb299d 100755 GIT binary patch delta 4754 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 W&nPk3G1{JsKM<lSi*fR)AUOc?8GmX3 delta 4754 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 diff --git a/assignments/assignment-5/starter/dshlib.c b/assignments/assignment-5/starter/dshlib.c index 0531d22..df3d589 100644 --- a/assignments/assignment-5/starter/dshlib.c +++ b/assignments/assignment-5/starter/dshlib.c @@ -99,9 +99,9 @@ Built_In_Cmds exec_built_in_cmd(cmd_buff_t *cmd) { } int build_cmd_list(char *cmd_line, command_list_t *clist) { - printf("Before trimming the cmd_line in build_cmd_list: '%s'\n", cmd_line); + //printf("Before trimming the cmd_line in build_cmd_list: '%s'\n", cmd_line); trim_spaces(cmd_line); - printf("Trimmed cmd_line: '%s'\n", cmd_line); + //printf("Trimmed cmd_line: '%s'\n", cmd_line); char *cmd_tok_save = NULL; char *cmd_tok = strtok_r(cmd_line, PIPE_STRING, &cmd_tok_save); @@ -111,7 +111,7 @@ int build_cmd_list(char *cmd_line, command_list_t *clist) { while(cmd_tok != NULL) { trim_spaces(cmd_tok); - printf("Command %d: '%s'\n", index, cmd_tok); + //printf("Command %d: '%s'\n", index, cmd_tok); if(index >= CMD_MAX) { return ERR_TOO_MANY_COMMANDS; @@ -121,7 +121,7 @@ int build_cmd_list(char *cmd_line, command_list_t *clist) { cmd->argc = 0; cmd->_cmd_buffer = cmd_tok; - printf("Command %d (before args parsing): '%s'\n", index, cmd_tok); + //printf("Command %d (before args parsing): '%s'\n", index, cmd_tok); char *arg_tok_save = NULL; char *arg_tok = strtok_r(cmd_tok, " ", &arg_tok_save); @@ -129,7 +129,7 @@ int build_cmd_list(char *cmd_line, command_list_t *clist) { while(arg_tok != NULL && cmd->argc < CMD_ARGV_MAX) { trim_spaces(arg_tok); - printf("Command %d: argv[%d]: '%s'\n", index, cmd->argc, arg_tok); + //printf("Command %d: argv[%d]: '%s'\n", index, cmd->argc, arg_tok); cmd->argv[cmd->argc] = arg_tok; cmd->argc++; @@ -137,17 +137,20 @@ int build_cmd_list(char *cmd_line, command_list_t *clist) { arg_tok = strtok_r(NULL, " ", &arg_tok_save); } - printf("Command %d finished parsing. argc = %d\n", index, cmd->argc); + cmd->argv[cmd->argc] = NULL; + + //printf("Command %d finished parsing. argc = %d\n", index, cmd->argc); index++; cmd_tok = strtok_r(NULL, PIPE_STRING, &cmd_tok_save); } clist->num = index; - printf("Total number of commands: %d\n", clist->num); + //printf("Total number of commands: %d\n", clist->num); return OK; } +/* int exec_cmd(cmd_buff_t *cmd, int cmd_index, command_list_t *clist) { int pipe_fds[2]; pid_t pid; @@ -173,36 +176,44 @@ int exec_cmd(cmd_buff_t *cmd, int cmd_index, command_list_t *clist) { } if(pid == 0) { - - // Debug: Print argv to verify contents + printf("Command %d: Before redirecting, STDOUT_FILENO = %d\n", cmd_index, STDOUT_FILENO); + + // Debug: Print the arguments for execvp to check if the command is correct printf("Command %d: execvp arguments:\n", cmd_index); for (int i = 0; cmd->argv[i] != NULL; i++) { - printf("argv[%d]: %s\n", i, cmd->argv[i]); + printf("argv[%d]: '%s'\n", i, cmd->argv[i]); } - if(cmd_index > 0) { - if(dup2(clist->pipes[cmd_index - 1][0], STDIN_FILENO) == -1) { - perror("Failed to redirect stdin"); - exit(1); - } - printf("Command %d: stdin redirected from pipe[%d][0] to STDIN_FILENO\n", cmd_index, cmd_index - 1); - } - - if(!is_last_cmd) { - if(dup2(pipe_fds[1], STDOUT_FILENO) == -1) { - perror("Failed to redirect stdout"); - exit(1); - } - printf("Command %d: stdout redirected to pipe[%d][1] from STDOUT_FILENO\n", cmd_index, cmd_index); - } + // Ensure stdin redirection for the second command + if (cmd_index > 0) { + if (dup2(clist->pipes[cmd_index - 1][0], STDIN_FILENO) == -1) { + perror("Failed to redirect stdin"); + exit(1); + } + printf("Command %d: stdin redirected from pipe[%d][0] to STDIN_FILENO\n", cmd_index, cmd_index - 1); + close(clist->pipes[cmd_index - 1][0]); + printf("Command %d: Closed pipe[%d][0] in child process\n", cmd_index, cmd_index - 1); + } + + // Redirect stdout if it's not the last command + if (!is_last_cmd) { + if (dup2(pipe_fds[1], STDOUT_FILENO) == -1) { + perror("Failed to redirect stdout"); + exit(1); + } + printf("Command %d: stdout redirected to pipe[%d][1] from STDOUT_FILENO\n", cmd_index, cmd_index); + //close(pipe_fds[1]); // Close the write end of the pipe + //printf("Command %d: Closed pipe[%d][1] in child process\n", cmd_index, cmd_index); + } for(int i = 0; i < clist->num - 1; i++) { - printf("Command %d: Closing pipe[%d][0] and pipe[%d][1]\n", cmd_index, i, i); - close(clist->pipes[i][0]); - close(clist->pipes[i][1]); - } + if (i != cmd_index - 1) { // Don't close the pipe we're reading from + close(clist->pipes[i][0]); + close(clist->pipes[i][1]); + printf("Command %d: Closed clist->pipes[%d][0] and clist->pipes[%d][1] in child process\n", cmd_index, i, i); + } + } - close(pipe_fds[0]); close(pipe_fds[1]); if(execvp(cmd->argv[0], cmd->argv) == -1) { @@ -213,15 +224,10 @@ int exec_cmd(cmd_buff_t *cmd, int cmd_index, command_list_t *clist) { else { if(!is_last_cmd) { close(pipe_fds[1]); - printf("Command %d: Parent closing pipe[%d][1]\n", cmd_index, cmd_index); - } - - /* - for(int i = 0; i < clist->num - 1; i++) { - close(clist->pipes[i][0]); - close(clist->pipes[i][1]); + printf("Command %d: Parent closing write end pipe[%d][1]\n", cmd_index, cmd_index); + //close(pipe_fds[0]); + //printf("Command %d: Parent closing read end pipe[%d][0]\n", cmd_index, cmd_index); } - */ if(cmd_index > 0) { close(clist->pipes[cmd_index - 1][0]); @@ -235,6 +241,102 @@ int exec_cmd(cmd_buff_t *cmd, int cmd_index, command_list_t *clist) { return OK; } +*/ + +int exec_cmd(cmd_buff_t *cmd, int cmd_index, command_list_t *clist) { + int pipe_fds[2]; + pid_t pid; + + int is_last_cmd = (cmd_index == clist->num - 1); + + printf("Command %d: is_last_cmd = %d\n", cmd_index, is_last_cmd); + + // Create pipe for non-last commands + if (!is_last_cmd) { + if (pipe(pipe_fds) == -1) { + perror("Pipe failed"); + return -1; + } + printf("Command %d: Pipe created with fd[0] = %d, fd[1] = %d\n", cmd_index, pipe_fds[0], pipe_fds[1]); + } + + pid = fork(); + + if (pid == -1) { + perror("Fork failed"); + return -1; + } + + if (pid == 0) { // Child process + printf("Command %d: Before redirecting, STDOUT_FILENO = %d\n", cmd_index, STDOUT_FILENO); + + printf("Debug: Command %d, before redirecting, pipe_fds[1] = %d\n", cmd_index, pipe_fds[1]); + + // Debug: Print the arguments for execvp to check if the command is correct + printf("Command %d: execvp arguments:\n", cmd_index); + for (int i = 0; cmd->argv[i] != NULL; i++) { + printf("argv[%d]: '%s'\n", i, cmd->argv[i]); + } + + // Redirect input from previous command, if it's not the first command + if (cmd_index > 0) { + if (dup2(clist->pipes[cmd_index - 1][0], STDIN_FILENO) == -1) { + perror("Failed to redirect stdin"); + exit(1); + } + printf("Command %d: stdin redirected from pipe[%d][0] to STDIN_FILENO\n", cmd_index, cmd_index - 1); + close(clist->pipes[cmd_index - 1][0]); // Close the read end of the previous pipe + printf("Command %d: Closed pipe[%d][0] in child process\n", cmd_index, cmd_index - 1); + } + + // Redirect stdout to the pipe if this is not the last command + if (!is_last_cmd) { + if (dup2(pipe_fds[1], STDOUT_FILENO) == -1) { + perror("Failed to redirect stdout"); + exit(1); + } + printf("Command %d: stdout redirected to pipe[%d][1] from STDOUT_FILENO\n", cmd_index, cmd_index); + close(pipe_fds[1]); // Close the write end of the pipe after redirection + printf("Command %d: Closed pipe[%d][1] in child process\n", cmd_index, cmd_index); + } + + // Close all unnecessary file descriptors in child process + for (int i = 0; i < clist->num - 1; i++) { + if (i != cmd_index - 1) { // Don't close the pipe we're reading from + close(clist->pipes[i][0]); + close(clist->pipes[i][1]); + printf("Command %d: Closed clist->pipes[%d][0] and clist->pipes[%d][1] in child process\n", cmd_index, i, i); + } + } + + // Execute the command + if (execvp(cmd->argv[0], cmd->argv) == -1) { + perror("Execvp failed"); + printf("Debug: Execvp failed for command %d. Pipe fds: pipe_fds[0] = %d, pipe_fds[1] = %d\n", cmd_index, pipe_fds[0], pipe_fds[1]); + exit(1); + } + } else { // Parent process + // Close the write end of the pipe in the parent if it's not the last command + if (!is_last_cmd) { + close(pipe_fds[1]); // Parent closes the write end of the pipe + printf("Command %d: Parent closing write end pipe[%d][1]\n", cmd_index, cmd_index); + } + + // Close the read end of the previous pipe in the parent process + if (cmd_index > 0) { + close(clist->pipes[cmd_index - 1][0]); // Parent closes the previous read end + printf("Command %d: Parent closing pipe[%d][0]\n", cmd_index, cmd_index - 1); + } + + // Wait for the child process to finish + int status; + waitpid(pid, &status, 0); + printf("Command %d: Child process finished with status %d\n", cmd_index, status); + } + return OK; +} + + int exec_local_cmd_loop() { char *cmd_buff = malloc(SH_CMD_MAX * sizeof(char)); @@ -255,7 +357,7 @@ int exec_local_cmd_loop() { break; } - printf("Raw input: '%s'\n", cmd_buff); + //printf("Raw input: '%s'\n", cmd_buff); // remove the trailing \n from cmd_buff cmd_buff[strcspn(cmd_buff, "\n")] = '\0'; @@ -263,7 +365,7 @@ int exec_local_cmd_loop() { // IMPLEMENT THE REST OF THE REQUIREMENTS trim_spaces(cmd_buff); - printf("Trimmed input in exec_local_cmd_loop: '%s'\n", cmd_buff); + //printf("Trimmed input in exec_local_cmd_loop: '%s'\n", cmd_buff); if(strlen(cmd_buff) == 0) { printf(CMD_WARN_NO_CMD); @@ -276,7 +378,7 @@ int exec_local_cmd_loop() { } rc = build_cmd_list(cmd_buff, &clist); - printf("RC value: %d\n", rc); + //printf("RC value: %d\n", rc); switch(rc) { case OK: -- GitLab