/simple_shell

Simple Shell Project: Amber McBride, Grayson Stiegler

Primary LanguageC

Simple Shell Project

simple_shell

  • sh - a command programming language that executes commands read from a terminal or a file. In this final project for the trimester, me and Amber McBride will code a "simple shell" from scratch. This includes different functions, elements, variables and many other working parts to make this happen. This project will allow us to have a better understanding on the Shell. Something we will be using the rest of our lives.

Resources

Read or watch:

 * Unix shell
 * Thompson shell
 * Ken Thompson
 * Everything you need to know to start coding your own shell

man or help:

  • sh (Run sh as well)
  • Learning Objectives
  • At the end of this project, you are expected to be able to explain to anyone, without the help of Google:

General

  • Who designed and implemented the original Unix operating system
  • Who wrote the first version of the UNIX shell
  • Who invented the B programming language (the direct predecessor to the C programming language)
  • Who is Ken Thompson
  • How does a shell work
  • What is a pid and a ppid
  • How to manipulate the environment of the current process
  • What is the difference between a function and a system call
  • How to create processes
  • What are the three prototypes of main
  • How does the shell use the PATH to find the programs
  • How to execute another program with the execve system call
  • How to suspend the execution of a process until one of its children terminates
  • What is EOF / “end-of-file”?

General Requiremnts:

  • Allowed editors: vi, vim, emacs
  • All your files will be compiled on Ubuntu 14.04 LTS
  • Your C programs and functions will be compiled with gcc 4.8.4 using the flags -Wall -Werror -Wextra and -pedantic
  • All your files should end with a new line
  • A README.md file, at the root of the folder of the project is mandatory
  • Your code should use the Betty style. It will be checked using betty-style.pl and betty-doc.pl
  • No more than 5 functions per file
  • All your header files should be include guarded
  • Use system calls only when you need to (why?)