A Simple Shell Interpreter (SSI) Solution

$35.00 $29.00

6 1 Introduction 7 In this assignment you will implement a simple shell interpreter (SSI), using system calls and 8 interacting with the system. The SSI will be very similar to the Linux shell bash: it will support 9 the foreground execution of programs, ability to change directories, and background execution. 10 You can implement…

5/5 – (2 votes)

You’ll get a: zip file solution

 

Description

5/5 – (2 votes)

6

1

Introduction

7

In this assignment you will implement a simple shell interpreter (SSI), using system calls and

8

interacting with the system. The SSI will be very similar to the Linux shell bash: it will support

9

the foreground execution of programs, ability to change directories, and background execution.

10

You can implement your solution in C or C++. Your work will be tested on linux.csc.uvic.ca,

11

to which you can remote login by ssh. You can also access Linux computers in ECS labs in person

12

or remotely by following https://connex.csc.uvic.ca/portal/site/itsupport/

13

Be sure to test your code on linux.csc.uvic.ca before submission. Many students have

14

developed their programs for their Mac OS X laptops only to find that their code works differently

15

on linux.csc.uvic.ca resulting in a SUBSTANTIAL loss of marks.

16

Be sure to study the man pages for the various systems calls and functions suggested in this

17

assignment. These functions are in Section 2 of the man pages, so you should type (for example):

18

$ man 2 waitpid

19

2

Schedule

20

In order to help you finish this programming assignment on time successfully, the schedule of this

21

assignment has been synchronized with both the lectures and the tutorials. There are three tutorials

22

arranged during the course of this assignment.

Date

Tutorial

Milestones

Jan 9/10

C and Linux refreshers, P1 spec go-through, design hints

design and code skeleton

Jan 16/17

system calls, system programming and testing

code almost done

Jan 23/24

final testing and last-minute help

final deliverable

23 3 Requirements

24 3.1 Basic Execution (5 marks)

25 Your SSI shows the prompt

1

  1. SSI: /home/user >

  1. for user input. The prompt includes the current directory name in absolute path, e.g., /home/user.

  2. You can use getcwd() to obtain the current directory.

  1. Using fork() and execvp(), implement the ability for the user to execute arbitrary commands

  1. using your shell program. For example, if the user types:

  1. SSI: /home/user > ls -l /usr/bin

  1. your shell should run the ls program with the parameters -l and /usr/bin—which should list the

  2. contents of the /usr/bin directory on the screen.

34

  1. Note: The example above uses 2 arguments. We will, however, test your SSI by invoking

  1. programs that take more than 2 arguments.

  1. A well-written shell should support as many arguments as given on the command line.

  1. 3.2 Changing Directories (5 marks)

  1. Using the functions getcwd() and chdir(), add functionality so that users can:

  1. change the current working directory using the command cd

  1. Note that SSI always shows the current directory at prompt.

  1. The cd command should take exactly one argument—the name of the directory to change into.

  1. The special argument .. indicates that the current directory should “move up” by one directory.

  2. That is, if the current directory is /home/user/subdir and the user types:

  1. SSI: /home/user/subdir > cd ..

  1. the current working directory will become /home/user.

  2. The special argument indicates the home directory of the current user. If cd is used without

  3. any argument, it is equivalent to cd , i.e., returning to the home directory, e.g., /home/user.

49

  1. Q: how do you know the user’s home directory location?

  2. H: from the environment variable with getenv().

  1. Note: There is no such a program called cd in the system that you can run directly (as you did

  2. with ls) and change the current directory of the calling program, even if you created one. You

  3. have to use the system call chdir().

  1. 3.3 Background Execution (5 Marks)

  1. Many shells allow programs to be started in the background—that is, the program is running, but

  1. the shell continues to accept input from the user.

  1. You will implement a simplified version of background execution that supports executing pro-

  1. cesses in the background. The maximum number of background processes is not limited.

  1. If the user types: bg cat foo.txt, your SSI shell will start the command cat with the argument

  1. foo.txt in the background. That is, the program will execute and the SSI shell will also continue

  1. to execute and give the prompt to accept more commands.

  1. The command bglist will have the SSI shell display a list of all the programs, including their

  1. execution arguments, currently executing in the background, e.g.,:

2

65

66

67

  1. /home/user/a1/foo 1

  1. /home/user/a1/foo 2 Total Background jobs: 2

  1. In this case, there are 2 background jobs, both running the program foo, the first one with

  2. process ID 123 and execution argument 1 and the second one with PID 456 and argument 2.

  1. Your SSI shell must indicate to the user after background jobs have terminated. Read the man

  2. page for the waitpid() system call. You are suggested to use the WNOHANG option. E.g.,

72

73

74

75

76

SSI: /home/user/subdir > cd

    1. /home/user/a1/foo 2 has terminated. SSI: /home/user >

  1. how do you make sure your SSI has this behavior?

H: check the list of background processes every time processing a user input.

77 4 Bonus Features

  1. Only a simplified shell with limited functionality is required in this assignment. However, students

  1. have the option to extend their design and implementation to include more features in a regular

  1. shell or a remote shell (e.g., kill/pause/resuming background processes, capturing and redirecting

  1. program output, handling many remote clients at the same time, etc).

  1. If you want to design and implement a bonus feature, you should contact the course instructor by

  1. email for permission one week before the due date, and clearly indicate the feature in the submission

  1. of your code. The credit for correctly implemented bonus features will not exceed 20% of the full

  1. marks for this assignment.

  1. 5 Odds and Ends

  1. 5.1 Compilation

  1. You will be provided with a Makefile that builds the sample code. It takes care of linking-in the

  1. GNU readline library for you. The sample code shows you how to use readline() to get input

  2. from the user, only if you choose to use readline library.

  1. 5.2 Submission

  1. Submit a tar.gz archive named p1.tar.gz of your assignment through connex, with the Makefile

  2. You can create a tar.gz archive of the current directory by typing:

  1. tar zcvf p1.tar.gz *

  1. Please do not submit .o files or executable files (a.out) files. Erase them before creating the

  1. archive.

3

97 5.3 Helper Programs

98 5.3.1 inf.c

  1. This program takes two parameters:

  1. tag: a single word which is printed repeatedly

  1. interval: the interval, in seconds, between two printings of the tag

  1. The purpose of this program is to help you with debugging background processes. It acts a trivial

  1. background process, whose presence can be “felt” since it prints a tag (specified by you) every few

  1. seconds (as specified by you). This program takes a tag so that even when multiple instances of it

  1. are executing, you can tell the difference between each instance.

  1. This program considerably simplifies the programming of the part of your SSI shell. You can

  2. find the running process by ps -ef and kill -9 a process by its process ID pid.

  1. 5.3.2 args.c

  1. This is a very trivial program which prints out a list of all arguments passed to it.

  1. This program is provided so that you can verify that your shell passes ALL arguments supplied on

  1. the command line — Often, people have off-by-1 errors in their code and pass one argument less.

  1. 5.4 Code Quality

  1. We cannot specify completely the coding style that we would like to see but it includes the following:

  1. 1. Proper decomposition of a program into subroutines — A 500 line program as a single routine

  1. won’t suffice.

  1. 2. Comment—judiciously, but not profusely. Comments serve to help a marker. To further

  1. elaborate:

118

119

120

121

  1. Your favorite quote from Star Wars or Douglas Adams’ Hitch-hiker’s Guide to the Galaxy does not count as comments. In fact, they simply count as anti-comments, and will result in a loss of marks.

  1. Comment your code in English. It is the official language of this university.

  1. 3. Proper variable names—leia is not a good variable name, it never was and never will be.

  1. 4. Small number of global variables, if any. Most programs need a very small number of global

  2. variables, if any. (If you have a global variable named temp, think again.)

  1. 5. The return values from all system calls listed in the assignment specification

  1. should be checked and all values should be dealt with appropriately.

  1. If you are in doubt about how to write good C code, you can easily find many C style guides on the Net.

  1. The Indian Hill Style Guide is an excellent short style guide.

4

129 5.5 Plagiarism

  1. This assignment is to be done individually. You are encouraged to discuss the design of your solution

  1. with your classmates, but each person must implement their own assignment.

  1. Your markers will submit the code to an automated plagiarism detection program.

  1. We add archived solutions from previous semesters (a few years worth) to the plagia-

  1. rism detector, in order to catch “recycled” solutions.

135

136

The End

5

A Simple Shell Interpreter (SSI) Solution
$35.00 $29.00