Project1: Unix Shell with History Feature - PowerPoint PPT Presentation

About This Presentation
Title:

Project1: Unix Shell with History Feature

Description:

Also set background =1 if & is met. If 'ctrl-d' is met, just ... A readme file that describes each file, how to compile the file(s), and how to run the file. ... – PowerPoint PPT presentation

Number of Views:1526
Avg rating:3.0/5.0
Slides: 11
Provided by: marily281
Category:

less

Transcript and Presenter's Notes

Title: Project1: Unix Shell with History Feature


1
Project1 Unix Shell with History Feature
  • Goals
  • Descriptions
  • Methodology
  • Submission

2
Goals
  • Understand how a simple shell works.
  • Understand systems calls, such as fork, read,
    wait, execvp, and etc.
  • Understand signal handling mechanisms

3
Descriptions
  • Demo
  • commandgt ls
  • commnadgt cat proj1.c
  • commandgt ctr-c
  • commandgt ctr-d
  • Input commands from keyboard
  • Fork a child process to perform the command
  • Store the past commands in a buffer
  • Given a signal, display the most recent commands
    in the buffer
  • Ctrl-C terminates the shell

4
Methodology
  • How to get the command from the keyboard?
  • Use system call read() with STDIN_FILENO
  • Implement a setup()
  • void setup(char inputBuffer, char args,
    int background)
  • setup() reads in the next command line,
    separating it into distinct tokens using
    whitespace as delimiters. setup() sets the args
    parameter as a null-terminated string. Also set
    background 1 if is met
  • If ctrl-d is met, just simply call exit(0)

5
Methodology
  • How to execute the command?
  • while (1) / Program terminates normally inside
    setup /
  • background 0
  • printf(" COMMAND-gt\n")
  • setup(inputBuffer,args,background) / get
    next command /
  • / the steps are
  • (1) fork a child process using fork()
  • (2) the child process will invoke execvp()
  • (3) if background 1, the parent will
    wait,
  • otherwise returns to the setup()
    function. /

6
Methodology
  • How to display recent commands?
  • Use signal handler CTRL-C is the SIGINT signal
  • / the signal handler function /
  • void handle_SIGINT()
  • write(STDOUT_FILENO,buffer,strlen(buffer))
  • exit(0)
  • int main(int argc, char argv)
  • / set up the signal handler /
  • struct sigaction handler
  • handler.sa_handler handle_SIGINT
  • sigaction(SIGINT, handler, NULL)
  • strcpy(buffer,"Caught ltctrlgtltcgt\n")
  • / wait for ltcontrolgt ltCgt /
  • while (1)
  • return 0

7
Methodology
  • How to keep track of past commands?
  • Limited-size buffer, why not use circular buffer?
  • Modify setup() to store the current command which
    may overwrite the oldest command in the buffer
  • Implement SININT signal handler to display the 10
    most recent commands

8
Suggested Steps
  • Step 1 implement setup()
  • Step 2 execute the command from setup()
  • Step 3 add the history feature

9
Submission
  • Email to zhuy_at_seattleu.edu
  • All source files
  • A readme file that describes each file, how to
    compile the file(s), and how to run the file. If
    there is any problem running the file, please
    state it here as well.
  • Makefile is preferred!

10
Questions
Write a Comment
User Comments (0)
About PowerShow.com