代做COMP213 Final Project代做Python语言

COMP213 Final Project

In this project, you will implement a command-line interpreter or shell. The shell should operate in this basic way: when you type in a command (in response to its prompt), the shell creates a child process that executes the command you entered and then prompts for more user input when it has finished.

The shells you implement will be similar to, but much simpler than, the one you run every day in Unix. You can  find  out which  shell you  are running by typing  echo $SHELL at a prompt. You may then wish to look at the man pages for sh or the shell you  are  running   (more  likely  tcsh or  bash)  to   learn  more   about  all  of  the functionality that can be present. For this project, you do not need to implement much functionality;  but  you  will  need  to  be  able  to  handle  running  multiple  commands simultaneously.

Your shell can be run in two ways: interactive and batch. In interactive mode, you will display a prompt (any string of your choosing), and the user of the shell will type in a command at the prompt. In batch mode, your shell is started by specifying a batch file on its command line; the batch file contains the list of commands that should be executed. In batch mode, you should not display a prompt. In batch mode, you should echo each line you read from the batch file back to the user before executing it; this will help you when you debug your shell (and us when we test your programs). In both interactive and batch mode, your shell stops accepting new commands when it sees the quit command on a line or reaches the end of the input stream (i.e., the end of the batch file or the user types 'Ctrl-D'). The shell should then exit after all running processes have terminated.

Each line (of the batch file or typed at the prompt) may contain multiple commands separated with the  ; character. Each of the commands separated by a  ; should be run simultaneously, or concurrently. (Note that this is different behavior. than standard Linux shells which run these commands one at a time, in order.) The shell should not print the next prompt or take more input until all of these commands have finished executing (the wait() and/or waitpid() system  calls may be useful here). For example, the following lines are all valid and have reasonable commands specified:

prompt>

prompt> ls

prompt> /bin/ls prompt> ls -l

prompt> ls -l ; cat file

prompt> ls -l ; cat file ; grep foo file2

For example, on the last line, the commands ls -l, cat file and grep foo file2 should all be running at the same time; as a result, you may see that their output is intermixed.

To exit the shell, the user can type quit. This should just exit the shell and be done with it (the exit() system call will be useful here). Note that quit is a built-in shell command; it is not to be executed like other programs the user types in. If the "quit" command is on the same line with other commands, you should ensure that the other commands execute (and finish) before you exit your shell.

These are all valid examples for quitting the shell.

prompt> quit

prompt> quit ; cat file prompt> cat file ; quit

This project is not as hard as it may seem at first reading (or perhaps it doesn't seem that hard at all, which is good!); in fact, the code you write will be much smaller than this specification. Writing your shell in a simple manner is a matter of finding the relevant library routines  and  calling them properly. Your  finished programs will probably be under 200 lines, including comments. If you find that you are writing a lot of code, it probably means that you  are  doing  something wrong  and  should  take  a break  from hacking and instead think about what you are trying to do.

Program Specifications

Your program must be invoked exactly as follows: shell [batchFile]

The command line arguments to your shell are to be interpreted as follows.

batchFile:  an  optional  argument  (often  indicated  by  square  brackets  as above). If present, your shell will read each line of the batchFile for commands to be executed. If not present, your shell will run in interactive mode by printing a prompt to the user at stdout and reading the command from stdin.

For example, if you run your program as shell /u/j/v/batchfile

then your program will read commands from  /u/j/v/batchfile until it sees the quit command.

Defensive programming is  an  important  concept  in  operating  systems:  an  OS  can't simply fail when it encounters an error; it must check all parameters before it trusts them. In general, there should be no circumstances in which your C program will core dump,  hang  indefinitely,   or  prematurely  terminate.  Therefore,  your  program  must respond  to  all  input  in  a  reasonable  manner;  by   "reasonable",  we  mean  print  an understandable error message and either continue processing or exit, depending upon the situation.

You should consider the following situations as errors; in each case, your shell should print a message (to stderr) and exit gracefully:

1. An incorrect number of command line arguments to your shell program.

2. The batch file does not exist or cannot be opened.

For the following situation, you should print a message to the user (stderr) and continue processing:

A command does not exist or cannot be executed.

Optionally,  to  make  coding  your  shell  easier,  you  may  print  an  error  message  and continue processing in the following situation:

A very long command line (for this project, over 512 characters including the ‘\n').

Your shell should also be able to handle the following scenarios, which are not errors (i.e., your shell should not print an error message):

An empty command line.

Extra white spaces within a command line.

Batch file ends without quit command or user types 'Ctrl-D' as a command in interactive mode.

In no case should any input or any command-line format cause your shell program to crash or to exit prematurely. You should think carefully about how you want to handle oddly formatted command lines (e.g., lines with no commands between a  ;). In these cases, you may choose to print a warning message and/or execute some subset of the commands. However, in all cases, your shell should continue to execute!

Example problematic input lines that your shell should handle gracefully:

prompt> ; cat file ; grep foo file2 prompt> cat file ; ; grep foo file2

prompt> cat file ; ls -l ;  prompt> cat file ;;;; ls -l prompt> ;; ls -l

prompt> ;


热门主题

课程名

mktg2509 csci 2600 38170 lng302 csse3010 phas3226 77938 arch1162 engn4536/engn6536 acx5903 comp151101 phl245 cse12 comp9312 stat3016/6016 phas0038 comp2140 6qqmb312 xjco3011 rest0005 ematm0051 5qqmn219 lubs5062m eee8155 cege0100 eap033 artd1109 mat246 etc3430 ecmm462 mis102 inft6800 ddes9903 comp6521 comp9517 comp3331/9331 comp4337 comp6008 comp9414 bu.231.790.81 man00150m csb352h math1041 eengm4100 isys1002 08 6057cem mktg3504 mthm036 mtrx1701 mth3241 eeee3086 cmp-7038b cmp-7000a ints4010 econ2151 infs5710 fins5516 fin3309 fins5510 gsoe9340 math2007 math2036 soee5010 mark3088 infs3605 elec9714 comp2271 ma214 comp2211 infs3604 600426 sit254 acct3091 bbt405 msin0116 com107/com113 mark5826 sit120 comp9021 eco2101 eeen40700 cs253 ece3114 ecmm447 chns3000 math377 itd102 comp9444 comp(2041|9044) econ0060 econ7230 mgt001371 ecs-323 cs6250 mgdi60012 mdia2012 comm221001 comm5000 ma1008 engl642 econ241 com333 math367 mis201 nbs-7041x meek16104 econ2003 comm1190 mbas902 comp-1027 dpst1091 comp7315 eppd1033 m06 ee3025 msci231 bb113/bbs1063 fc709 comp3425 comp9417 econ42915 cb9101 math1102e chme0017 fc307 mkt60104 5522usst litr1-uc6201.200 ee1102 cosc2803 math39512 omp9727 int2067/int5051 bsb151 mgt253 fc021 babs2202 mis2002s phya21 18-213 cege0012 mdia1002 math38032 mech5125 07 cisc102 mgx3110 cs240 11175 fin3020s eco3420 ictten622 comp9727 cpt111 de114102d mgm320h5s bafi1019 math21112 efim20036 mn-3503 fins5568 110.807 bcpm000028 info6030 bma0092 bcpm0054 math20212 ce335 cs365 cenv6141 ftec5580 math2010 ec3450 comm1170 ecmt1010 csci-ua.0480-003 econ12-200 ib3960 ectb60h3f cs247—assignment tk3163 ics3u ib3j80 comp20008 comp9334 eppd1063 acct2343 cct109 isys1055/3412 math350-real math2014 eec180 stat141b econ2101 msinm014/msing014/msing014b fit2004 comp643 bu1002 cm2030
联系我们
EMail: 99515681@qq.com
QQ: 99515681
留学生作业帮-留学生的知心伴侣!
工作时间:08:00-21:00
python代写
微信客服:codinghelp
站长地图