Question: fork.c #include #include #include int main() { pid_t pid; pid = fork(); if(pid myls.c #include #include #include #include int main() { pid_t pid; pid =

 fork.c #include #include #include int main() { pid_t pid; pid =

fork.c

#include #include #include

int main() { pid_t pid;

pid = fork(); if(pid

myls.c #include #include #include #include

int main() { pid_t pid;

pid = fork(); if(pid

myshell.c

/* This example is stolen from Dr. Raju Rangaswami's original 4338 demo and modified to fit into our lecture. */

#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; }

1. Carefully study the examples provided: fork.c, myls.c, myshell.c, etc. You need to know how they work in order for you to finish this assignment; the examples will also get you prepared for 2. Write a program called minishell that creates two child processes: one to execute 'ls' and the other to execute 'sort. After the forks, the original parent process waits for both child processes to finish before it terminates. The standard output of 'ls' process should be piped to the input to the 'sort' process. Make sure you close the unnecessary open files for the three processes

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!