Question: /*myshell.c */ #include #include #include #include #include #define MAX_ARGS 20 #define BUFSIZ 1024 int get_args(char* cmdline, char* args[]) { int i = 0; /* if

 /*myshell.c */ #include #include #include #include #include #define MAX_ARGS 20 #defineBUFSIZ 1024 int get_args(char* cmdline, char* args[]) { int i = 0;

/*myshell.c */

#include #include #include #include #include

#define MAX_ARGS 20 #define BUFSIZ 1024

int get_args(char* cmdline, char* args[]) { int i = 0;

/* if no args */ if((args[0] = strtok(cmdline, " \t ")) == NULL) return 0;

while((args[++i] = strtok(NULL, " \t ")) != NULL) { if(i >= MAX_ARGS) { printf("Too many arguments! "); exit(1); } } /* the last one is always NULL */ return i; }

void execute(char* cmdline) { int pid, async; char* args[MAX_ARGS];

int nargs = get_args(cmdline, args); if(nargs

if(!strcmp(args[0], "quit") || !strcmp(args[0], "exit")) { exit(0); }

/* check if async call */ if(!strcmp(args[nargs-1], "&")) { async = 1; args[--nargs] = 0; } else async = 0;

pid = fork(); if(pid == 0) { /* child process */ execvp(args[0], args); /* return only when exec fails */ perror("exec failed"); exit(-1); } else if(pid > 0) { /* parent process */ if(!async) waitpid(pid, NULL, 0); else printf("this is an async call "); } else { /* error occurred */ perror("fork failed"); exit(1); } }

int main (int argc, char* argv []) { char cmdline[BUFSIZ]; for(;;) { printf("COP4338$ "); if(fgets(cmdline, BUFSIZ, stdin) == NULL) { perror("fgets failed"); exit(1); } execute(cmdline) ; } return 0; }

Develop a C language multi-process programs. You are expected to extend the program and add pipelines myshell.c and lo redirections. In particular, your shell program should recognize the following: 1. Redirect standard output from a command to a file. Note: if the file already exist, it will be erased and overwritten without warning. For example, COP43 38$ ls 1 COP 4338$ sort mvshell.c 2 Note that you're not supposed to implement the unix commands (ls, sort, You do need to implement the shell that invoke these commands and you need to "wire" up the standard input and output so that they "chain" up as expected. 2. Append standard output from a command to a file if the file exists, if the file does not exist, create one. For example, COP4338$ sort mvshell.c 1 COP4 338$ echo "Add A Line 1 3. Redirect the standard input to be from a file, rather than the keyboard. For example, Develop a C language multi-process programs. You are expected to extend the program and add pipelines myshell.c and lo redirections. In particular, your shell program should recognize the following: 1. Redirect standard output from a command to a file. Note: if the file already exist, it will be erased and overwritten without warning. For example, COP43 38$ ls 1 COP 4338$ sort mvshell.c 2 Note that you're not supposed to implement the unix commands (ls, sort, You do need to implement the shell that invoke these commands and you need to "wire" up the standard input and output so that they "chain" up as expected. 2. Append standard output from a command to a file if the file exists, if the file does not exist, create one. For example, COP4338$ sort mvshell.c 1 COP4 338$ echo "Add A Line 1 3. Redirect the standard input to be from a file, rather than the keyboard. For example

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!