Project 1, Fork

Download Report

Transcript Project 1, Fork

Programming Project 1 –
Fork
CS-502 Fall 2006
Project 1, Fork
1
Programming Assignment
1. Write a command called doit to execute
another command and print out statistics
2. Extend doit to become a basic shell that
prompts for and executes commands
3. Extend your shell to shell2 to execute
commands in the background
CS-502 Fall 2006
Project 1, Fork
2
Purpose
• To practice using the fork and exec
facilities of Unix/Linux
• To learn how to find and use on-line
documentation about system calls and
system facilities.
• man pages
• To be accustomed to speaking directly
with the operating system
CS-502 Fall 2006
Project 1, Fork
3
Part 1: doit
• doit command:–
• Take another command line as argument
• Execute that command
• Print out statistics about command
• Must execute on a CCC or CS Linux system
• May not use system() system call
• Helpful hints:–
• fork(), execvp(), wait()
• getrusage(), gettimeofday()
CS-502 Fall 2006
Project 1, Fork
4
Part 1
(output)
% doit cat /etc/motd
/* print the current message of the day */
/* statistics about the cat command */
CS-502 Fall 2006
Project 1, Fork
5
Part 2: shell
• Repeatedly prompt for command lines
• Execute each command and print out statistics,
as in doit
• Implement special “built-in” commands
• exit
• cd dir
• Special conditions
•
•
•
•
Input from stdin
Exit on end of file
Complain about illegal commands
Check for line length, number of arguments
CS-502 Fall 2006
Project 1, Fork
6
Part 2 output
% shell
==>cat /etc/motd
/* print the current message of the day */
/* statistics about the cat command */
==>cd dir
/* current directory is changed to dir */
==>ls
/* listing of files in current directory */
/* statistics about this ls command */
==>exit
%
/* back to your previous Linux prompt */
CS-502 Fall 2006
Project 1, Fork
7
Part 3: Background execution
(shell2)
• Modify shell to support execute commands
in background, indicated by ‘&’ character
• Causes shell to prompt for next command before
previous command is complete
• jobs built-in command lists background tasks in
progress
• Report completion at next opportunity
– E.g., the next time user types a command, but before
executing that command
CS-502 Fall 2006
Project 1, Fork
8
Part 3 output
% shell2
==>numbercrunch &
[1] 12345 /* indicate background task #1, process id */
==>jobs
[1] 12345 numbercrunch
/* print process id and command name for tasks */
==>ls
/* listing of files in the current directory */
/* statistics about this ls command */
==>cat /etc/motd
[1] 12345 Completed < background job command >
/* statistics about background job */
/* print the current message of the day */
/* statistics about this cat command */
==>exit
%
/* back to your previous Linux prompt */
CS-502 Fall 2006
Project 1, Fork
9
Work environment
• You may do this work on
– CCC machine
– CS machine
– Your virtual machine (if you have set it up already)
• You may use C or C++
• Note:
– CCC and CS do not use same version of Linux kernel
or C/C++ compiler
– Your virtual machine uses the latest version
CS-502 Fall 2006
Project 1, Fork
10
Project submission
• Due Monday, September 25, at start of
class
• Submit via turnin
• command = ‘/cs/bin/turnin’ on CCC machines
• classname = ‘cs502’
• assignment = ‘project1’
• Put your name at top of every file!
(You would be surprised how many students forget!)
CS-502 Fall 2006
Project 1, Fork
11
Project Submission
•
•
•
•
(continued)
Code of your solution
Makefile to build all programs
One or more test cases
Write-up explaining everything
• DO NOT
– Put different parts of projects in folders
– Create different Makefiles for different parts
CS-502 Fall 2006
Project 1, Fork
12
Not a team project!
• Each student must submit own solution
• Encouraged to discuss general approach,
meaning of system calls, etc., with friends
• Encouraged to seek help if puzzled by
some concept, system call, etc.
• Distill all discussions into your own work!
CS-502 Fall 2006
Project 1, Fork
13