Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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 =

image text in transcribed

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

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Beginning VB 2008 Databases

Authors: Vidya Vrat Agarwal, James Huddleston

1st Edition

1590599470, 978-1590599471

More Books

Students also viewed these Databases questions

Question

=+ How do some of them single you out when you're the consumer?

Answered: 1 week ago