Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

How can I create the Shell program as requirement below? Please code with comments. Thank you. Your shell should read lines of user input, then

How can I create the Shell program as requirement below? Please code with comments. Thank you.

Your shell should read lines of user input, then parse and execute the commands by forking/creating new processes. For each command, your shell should call fork() followed by execvp(). Following each command, your shell should wait for its child process to complete, and then print the child PID and the return result from the child process. The user should be able to specify the command to execute by giving a path to the executable file (e.g. /bin/ls) or by using path expansion to locate the executable file (i.e. searching each directory in the PATH environment variable). (Note that the execvp() function perform this processing automatically; you do not need to program it yourself.)

If your shell encounters an error while reading a line of input it should report the error and exit. If your shell encounters EOF while reading a line of input, it should exit gracefully without reporting an error. Ensure that you do not overflow a 512 byte buffer when fetching the line of input (functions that do not accept the size of your buffer are not able to prevent overflows whereas functions that accept a size generally do; be sure to check the manpage of any function you use carefully). You do not need to report an error if the user's input line is larger than the 512 byte buffer; just use the truncated input as the command.

Before your shell forks a new process to call execvp(), it should parse the input string and separate it into a collection of substrings representing the executable file and any command-line arguments. If the user entered an empty line, report an error and fetch a new line of input. Your code must handle at least four command-line arguments (in addition to the name of the executable file itself).

You should store pointers to the substrings in an array (similar to the "argv" array passed to main()) and pass this array of arguments to execvp(). Note that the number of command-line arguments is variable; this is indicated in the array by including a NULL pointer in the array after the last substring. (This means that if the user specifies N substrings, your array must hold N + 1 pointers where the last pointer is NULL.) If the user enters the exit command, your shell should terminate (returning to the regular shell).

Note: your shell does not need to support cd (change directory).

Your program should be able to also accept a command line argument which is the prefix prompt. If no value is specified use "> " as the prompt.

Here is a sample execution:

 student@student-VirtualBox:~/CSC415/assignment3$ ./assn3 prompt$ prompt$ ls -l total 20 -rwxr-xr-x 1 student student 13216 Feb 23 13:44 assn3 -rw-r--r-- 1 student student 1583 Feb 23 13:44 assn3.c Child 2124, exited with 0 prompt$ ls foo ls: cannot access 'foo': No such file or directory Child 2125, exited with 2 prompt$ exit student@student-VirtualBox:~/CSC415/assignment3$ 

Here is the Makefile:

ROOTNAME=__HWHW=3FOPTION=_mainRUNOPTIONS="Prompt> "CC=gccCFLAGS= -g -I.LIBS =-l pthreadDEPS = OBJ = $(ROOTNAME)$(HW)$(FOPTION).o

%.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS)

$(ROOTNAME)$(HW)$(FOPTION): $(OBJ) $(CC) -o $@ $^ $(CFLAGS) $(LIBS)

clean: rm *.o $(ROOTNAME)$(HW)$(FOPTION)

run: $(ROOTNAME)$(HW)$(FOPTION) ./$(ROOTNAME)$(HW)$(FOPTION) $(RUNOPTIONS)

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

Do you currently have a team agreement?

Answered: 1 week ago

Question

How will the members be held accountable?

Answered: 1 week ago