Question
the upper window is test-wish.sh file - I am supposed to have stacks in this code. Can you please add an array / pointer or
the upper window is test-wish.sh file -
I am supposed to have stacks in this code. Can you please add an array / pointer or anything else so that we can have stack in this code
#include
#define MAX_CMD_LENGTH 1024 #define MAX_ARGS 64
char error_message[30] = "An error has occurred ";
int parse_input(char* input, char** args) { int i = 0; char* token = strtok(input, " \t "); while (token != NULL) { args[i++] = token; token = strtok(NULL, " \t "); } args[i] = NULL; return i; } //To implement the cd command using chdir() system call in the provided code, we need to modify the execute_cmd function to check if the command entered by the user is cd. If it is, then we change the directory using chdir() system call.Here is the modified execute_cmd function
int execute_cmd(char** args, char** path, int num_paths) {
if (args[0] == NULL) { return 0; // empty command }
if (strcmp(args[0], "cd") == 0) { // ... cd implementation ... }
pid_t pid = fork(); if (pid == -1) { write(STDERR_FILENO, error_message, strlen(error_message)); return 1; } else if (pid == 0) { // child process int i; for (i = 0; i
int main(int argc, char** argv) { // initialize path with /bin char* path[2] = {"/bin", NULL}; int num_paths = 1; // check if we're in batch mode FILE* input_file = NULL; if (argc > 2) { write(STDERR_FILENO, error_message, strlen(error_message)); return 1; } else if (argc == 2) { input_file = fopen(argv[1], "r"); if (input_file == NULL) { write(STDERR_FILENO, error_message, strlen(error_message)); return 1; } } // main loop char* line = NULL; size_t line_size = 0; ssize_t line_len; while (1) { // prompt for input if (input_file == NULL) { printf("wish> "); fflush(stdout); } // read input line_len = getline(&line, &line_size, input_file != NULL ? input_file : stdin); if (line_len == -1) { // end of file or error break; } else if (line_len == 1) { // empty line continue; } else if (strncmp(line, "exit", 4) == 0) { // exit command break; } else { // parse input char* args[MAX_ARGS]; //int num_args = parse_input(line, args);
// execute command int ret = execute_cmd(args, path, num_paths); if (ret != 0) { printf("Command returned with error code %d ", ret); }
// check for exit command if (strcmp(args[0], "exit") == 0) { break; } } // free memory free(line); line = NULL; line_size = 0; } if (input_file != NULL) { fclose(input_file); } return 0; }
For bug reporting instructions, please see: http// wuw. gnu. org/software /g gdb /bugg/. Find the GDB manual and other documentation resources online at: http://wuw. gnu. org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word". (gg (b) bt No stack. (gdb) backtrace No stack. (gdb) \# ! /bin/bash if ! [ [ -x wish ] ] then echo "wish executable does not exist" exit 1 fi ./tester/run-tests.sh $
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started