CMSC 216 Exercise #5
CMSC 216 Exercise #5 Spring 2019
Shell Jr (”Shellito”) Due: Tue Apr 23, 2019, 11:30PM
1 Objectives
To practice fork() and exec by implementing a very simple shell.
2 Overview
The first thing you need to do is to copy the directory shelljr we have left in the grace cluster under the exercises
directory. Remember that you need that folder as it contains the .submit file that allows you to submit.
3 Specifications
For this exercise you will implement a very simpliflied shell. A shell is a C program that executes commands
by forking itself and using exec. We have been using tcsh, but there are other shells like ksh, sh, bash, etc. The
name of our shell is shell jr .
Unlike other assignments for this course, you can work together with other classmates, but you may NOT
exchange any code.
4 Shell Jr Functionality
Your shell will have a loop that reads command lines and process them. The prompt for your shell will be
”shell jr: ”. The commands your shell must handle are:
1. exit - When the user enters the exit command the shell will stop executing by calling exit(). Before
executing exit, the shell will print the message ”See you”.
2. hastalavista - Has the same functionality as exit.
3. cd - This command changes the current directory. You can assume the user will always provide a directory
as an argument.
4. A command with a maximum of one argument (e.g., wc location.txt). That means your shell should be
able to handle commands like pwd, date or wc location.txt .
5 Requirements
代做CMSC 216作业、代写Shellito留学生作业、C/C++语言作业代写
1. You must NOT use an exec* function to implement the functionality associated with the commands
exit, hastalavista, and cd. For other commands, you must create a child (via fork()) and use execvp() to
execute the command.
2. If the user provides an invalid command, the message ”Failed to execute ” followed by the command
name should be printed. In this case the child will exit returning the error code EX OSERR. Use printf
to display the message and flush the output buffer (e.g., fflush(stdout)). Note that the shell is not terminated
by executing an invalid command.
3. You don’t need to handle the case where the user just types enter (you can assume the user will always
provide a command).
4. Make sure you use printf to print the shell prompt and that you flush the buffer.
5. It is your responsibility to verify that your program generates the expected results in the submit server.
1
6. You must use execvp (and no other exec* system call).
7. Your code must be written in the file shell jr.c.
8. You may not use dup2, read, write, nor pipes.
9. You may not use system() in order to execute commands.
10. You can assume a line of input will have a maximum of 1024 characters.
11. Provide a makefile that builds an executable called shell jr. Name the target that builds the executable
shell jr . Feel free to add any other targets you need.
12. All your C programs in this course should be written using the compiler gcc, with the options defined
in the gcc aliases info.txt file. This file can be found in the info folder of the public grace account.
13. Your program should be written using good programming style as defined at
http://www.cs.umd.edu/~nelson/classes/resources/cstyleguide/
14. Common error: If you get the submit server message ”Execution error, exit code 126” execute ”make
clean” before submitting your code.
15. Common error: To forget to return the correct value (e.g., 0) in your code.
16. Your C program representing your shell does not take command line arguments. That is, the main
function is defined as:
int main() { }
17. When you see that execvp relies on argv that means it uses an array of strings (argv is not the parameter
associated with command line arguments). Just initialize argv with an array of strings and pass it to
execvp.
18. Your shell should exit when end of file is seen. This explains why public tests do not have exit nor
hastalvista as the last command.
19. ShellJr exercise relies on Standard I/O, NOT unix I/O.
20. ShellJr takes a maximum of two arguments (e.g., wc location.txt). You can ignore any other values
provided after the second argument. For example, if someone enters wc location.txt bla bla will be
ignored and the command will be processed successfully.
21. For exit and hastalavista you can ignore any values provided after the command (just exit the shell).
22. For cd you can ignore any values provided after the directory name. For example, cd /tmp bla will
change the current directory to /tmp.
23. If an invalid directory is provided to the cd command, your shell should print an error message similar
to:
"Cannot change to directory <DIRECTORY_HERE>"
24. Do not use signals.
2
6 How to Start
You should start by creating a loop that reads lines and displays them. Then you should begin to process
each command (starting with the exit and cd commands). You are free to process each line any way you
want, however, reading a whole line using fgets and then processing the line using sscanf could make things
simpler. Keep in mind that if sscanf cannot read a value into a string variable, it will not change the variable.
This could help you identify when a command has an argument or not.
7 Submitting your assignment
1. In the assignment directory execute the command submit.
2. Your assignment must be electronically submitted by the date and time above to avoid losing credit. See
the course syllabus for details.
8 Grading Criteria
Your assignment grade will be determined with the following weights:
Results of public tests 28%
Results of release tests 72%
9 Academic integrity statement
Please carefully read the academic honesty section of the course syllabus. Any evidence of impermissible
cooperation on assignments, use of disallowed materials or resources, or unauthorized use of computer accounts,
will be submitted to the Student Honor Council, which could result in an XF for the course, or suspension
or expulsion from the University. Be sure you understand what you are and what you are not permitted
to do in regards to academic integrity when it comes to assignments. These policies apply to all students, and
the Student Honor Council does not consider lack of knowledge of the policies to be a defense for violating
them. Full information is found in the course syllabus– please review it at this time.
因为专业,所以值得信赖。如有需要,请加QQ:99515681 或邮箱:99515681@qq.com
微信:codinghelp
CMSC 216 Exercise #5的更多相关文章
- Android Studio Error:CreateProcess error=216
Error:CreateProcess error=216, This version of %1 is not compatible with the version of Windows you' ...
- MIT 6.828 JOS学习笔记12 Exercise 1.9
Lab 1中Exercise 9的解答报告 Exercise 1.9: 判断一下操作系统内核是从哪条指令开始初始化它的堆栈空间的,以及这个堆栈坐落在内存的哪个地方?内核是如何给它的堆栈保留一块内存空间 ...
- MIT 6.828 JOS学习笔记13 Exercise 1.10
Lab 1 Exercise 10 为了能够更好的了解在x86上的C程序调用过程的细节,我们首先找到在obj/kern/kern.asm中test_backtrace子程序的地址, 设置断点,并且探讨 ...
- MIT 6.828 JOS学习笔记11 Exercise 1.8
Exercise 1.8 我们丢弃了一小部分代码---即当我们在printf中指定输出"%o"格式的字符串,即八进制格式的代码.尝试去完成这部分程序. 解答: 在这个练 ...
- MIT 6.828 JOS学习笔记8. Exercise 1.4
Lab 1 Exercise 4 阅读关于C语言的指针部分的知识.最好的参考书自然是"The C Programming Language". 阅读5.1到5.5节.然后下载poi ...
- MIT 6.828 JOS学习笔记9. Exercise 1.5
Lab 1 Exercise 5 再一次追踪一下boot loader的一开始的几句指令,找到第一条满足如下条件的指令处: 当我修改了boot loader的链接地址,这个指令就会出现错误. 找到这样 ...
- MIT 6.828 JOS学习笔记5. Exercise 1.3
Lab 1 Exercise 3 设置一个断点在地址0x7c00处,这是boot sector被加载的位置.然后让程序继续运行直到这个断点.跟踪/boot/boot.S文件的每一条指令,同时使用boo ...
- MIT 6.828 JOS学习笔记3. Exercise 1.2
这篇博文是对Lab 1中的Exercise 2的解答~ Lab 1 Exercise 2: 使用GDB的'si'命令,去追踪ROM BIOS几条指令,并且试图去猜测,它是在做什么.但是不需要把每个细节 ...
- Stanford coursera Andrew Ng 机器学习课程编程作业(Exercise 2)及总结
Exercise 1:Linear Regression---实现一个线性回归 关于如何实现一个线性回归,请参考:http://www.cnblogs.com/hapjin/p/6079012.htm ...
随机推荐
- eclipse快捷键 (包括查找类、方法、变量)
♦[Ct rl+T] 搜索当前接口的实现类 1. [ALT +/] 智能提示 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类.方法和属性的名字时 ...
- 逆元知识普及(进阶篇) ——from Judge
关于一些逆元知识的拓展 刚艹完一道 提高- 的黄题(曹冲养猪) ,于是又来混一波讲解了 ——承接上文扫盲篇 四.Lucas定理(求大组合数取模) 题外话 这里Lucas定理的证明需要用到很多关 ...
- 【原创】大数据基础之Spark(1)Spark Submit即Spark任务提交过程
Spark2.1.1 一 Spark Submit本地解析 1.1 现象 提交命令: spark-submit --master local[10] --driver-memory 30g --cla ...
- 【原创】大叔案例分享(3)用户行为分析--见证scala的强大
一 场景分析 用户行为分析应用的场景很多,像线上网站访问统计,线下客流分析(比如图像人脸识别.wifi探针等),比较核心的指标有几个: PV | UV | SD | SC 指标说明: PV(Page ...
- css好看的银行卡号样式
.cardNo { font-size: 17px; font-family: menlo,tahoma; text-shadow: 1px 1px 2px #666; line-height: 18 ...
- Python-Django 视图层
1 request对象 method:请求方式 GET:get请求的参数(post请求,也可以携带参数) POST:post请求的参数(本质是从bdoy中取出来,放到里面了) COOKIES---&g ...
- sublime自动保存设置
首选项——用户设置 (Preferences:Settings - User) 行末添加"save_on_focus_lost": true 注意用逗号分隔 保存即可 save_o ...
- noj算法 迷宫问题 回溯法
描述: 给一个20×20的迷宫.起点坐标和终点坐标,问从起点是否能到达终点. 输入: 多个测例.输入的第一行是一个整数n,表示测例的个数.接下来是n个测例,每个测例占21行,第一行四个整数x1,y1, ...
- unity 网页加载AB问题
下载一次后会缓存,清理一下就能加载新的同名AB了 AssetBundle.onload
- javascript中字符串的方法
字符串的方法 charAt();返回字符串指定索引的字符: concat();连接两个或多个字符串: indexOf();返回字符串中检索指定字符第一次出现的位置: lastIndexOf();返回字 ...