国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看

合肥生活安徽新聞合肥交通合肥房產(chǎn)生活服務(wù)合肥教育合肥招聘合肥旅游文化藝術(shù)合肥美食合肥地圖合肥社保合肥醫(yī)院企業(yè)服務(wù)合肥法律

2024 ICS 代做、代寫 C++語言程序
2024 ICS 代做、代寫 C++語言程序

時間:2025-01-06  來源:合肥網(wǎng)hfw.cc  作者:hfw.cc 我要糾錯



2024 ICS Lab4: Tiny Shell
Assigned: Dec. 02, Due: Sat, Jan. 04, 2025, 11:59PM
Introduction
The purpose of this lab is to become more familiar with the concepts of process control and signalling. You’ll do this by writing a simple Unix shell program that supports job control.
Logistics
Any clarifications and revisions to the lab will be posted on the course Web page.
Hand Out Instructions
You can get the Tiny Shell Lab with git from the ICS Course Server, you just need to switch lab4 branch
git fetch
git checkout lab4
It contains 26 files, one of which is called “README”. Please read “README” to check if you have all the files.
After making sure you get the right handout. Then do the following:
• Type the command make to compile and link some test routines.
• Type your name and student ID in the header comment at the top of tsh.c.
Looking at the tsh.c (tiny shell) file, you will see that it contains a functional skeleton of a simple Unix shell. To help you get started, we have already implemented the less interesting functions. Your assignment is to complete the remaining empty functions listed below. As a sanity check for you, we’ve listed the approximate number of lines of code for each of these functions in our reference solution (which includes lots of comments).
1

• eval: Main routine that parses and interprets the command line. [70 lines]
• builtin_cmd: Recognizes and interprets the built-in commands: quit, fg, bg, and jobs. [25 lines]
• do_bgfg: Implements the bg and fg built-in commands. [50 lines]
• waitfg: Waits for a foreground job to complete. [20 lines]
• sigchld_handler: Catches SIGCHILD signals. 80 lines]
• sigint_handler: Catches SIGINT (ctrl-c) signals. [15 lines]
• sigtstp_handler: Catches SIGTSTP (ctrl-z) signals. [15 lines]
Each time you modify your tsh.c file, type make to recompile it. To run your shell, type tsh to the command line:
unix> ./tsh
tsh> [type commands to your shell here]
General Overview of Unix Shells
A shell is an interactive command-line interpreter that runs programs on behalf of the user. A shell repeatedly prints a prompt, waits for a command line on stdin, and then carries out some action, as directed by the contents of the command line.
The command line is a sequence of ASCII text words delimited by whitespace. The first word in the command line is either the name of a built-in command or the pathname of an executable file. The remaining words are command-line arguments. If the first word is a built-in command, the shell immediately executes the command in the current process. Otherwise, the word is assumed to be the pathname of an executable program. In this case, the shell forks a child process, then loads and runs the program in the context of the child. The child processes created as a result of interpreting a single command line are known collectively as a job. In general, a job can consist of multiple child processes connected by Unix pipes.
If the command line ends with an ampersand ”&”, then the job runs in the background, which means that the shell does not wait for the job to terminate before printing the prompt and awaiting the next command line. Otherwise, the job runs in the foreground, which means that the shell waits for the job to terminate before awaiting the next command line. Thus, at any point in time, at most one job can be running in the foreground. However, an arbitrary number of jobs can run in the background.
For example, typing the command line tsh> jobs
causes the shell to execute the built-in jobs command. Typing the command line T 2

tsh> /bin/ls -l -d
runs the ls program in the foreground. By convention, the shell ensures that when the program begins executing its main routine
int main(int argc, char *argv[])
the argc and argv arguments have the following values:
• argc == 3,
• argv[0] == “/bin/ls”, • argv[1]== “-l”,
• argv[2]== “-d”.
Alternatively, typing the command line tsh> /bin/ls -l -d &
runs the ls program in the background.
Unix shells support the notion of job control, which allows users to move jobs back and forth between background and foreground, and to change the process state (running, stopped, or terminated) of the processes in a job. Typing ctrl-c causes a SIGINT signal to be delivered to each process in the foreground job. The default action for SIGINT is to terminate the process. Similarly, typing ctrl-z causes a SIGTSTP signal to be delivered to each process in the foreground job. The default action for SIGTSTP is to place a process in the stopped state, where it remains until it is awakened by the receipt of a SIGCONT signal. Unix shells also provide various built-in commands that support job control. For example:
• jobs: List the running and stopped background jobs.
• bg <job>: Change a stopped background job to a running background job.
• fg <job>: Change a stopped or running background job to a running in the foreground. • kill <job>: Terminate a job.
The tsh Specification
Your tsh shell should have the following features: • The prompt should be the string “tsh> ”.
3

• The command line typed by the user should consist of a name and zero or more arguments, all separated by one or more spaces. If name is a built-in command, then tsh should handle it immediately and wait for the next command line. Otherwise, tsh should assume that name is the path of an executable file, which it loads and runs in the context of an initial child process (In this context, the term job refers to this initial child process).
• tsh need not support pipes (|) or I/O redirection (< and >).
• Typing ctrl-c (ctrl-z) should cause a SIGINT (SIGTSTP) signal to be sent to the current foreground job, as well as any descendents of that job (e.g., any child processes that it forked). If there is no foreground job, then the signal should have no effect.
• If the command line ends with an ampersand &, then tsh should run the job in the back- ground. Otherwise, it should run the job in the foreground.
• Each job can be identified by either a process ID (PID) or a job ID (JID), which is a positive integer assigned by tsh. JIDs should be denoted on the command line by the prefix ’%’. For example, “%5” denotes JID 5, and “5” denotes PID 5. (We have provided you with all of the routines you need for manipulating the job list.)
• tsh should support the following built-in commands:
– The quit command terminates the shell.
– The jobs command lists all background jobs.
– The bg <job> command restarts <job> by sending it a SIGCONT signal, and then runs it in the background. The <job> argument can be either a PID or a JID.
– The fg <job> command restarts <job> by sending it a SIGCONT signal, and then runs it in the foreground. The <job> argument can be either a PID or a JID.
• tsh should reap all of its zombie children. If any job terminates because it receives a signal that it didn’t catch, then tsh should recognize this event and print a message with the job’s PID and a description of the offending signal.
Checking Your Work
We have provided some tools to help you check your work. Before you run any executable program, please make sure it has the execution permission. If not, use “chmod +x” to give it the execution permission.
Reference solution. The Linux executable tshref is the reference solution for the shell. Run this program to resolve any questions you have about how your shell should behave. Your shell should emit output that is identical to the reference solution (except for PIDs, of course, which change from run to run).
Shell driver. The sdriver.pl program executes a shell as a child process, sends it commands and signals as directed by a trace file, and captures and displays the output from the shell.
Use the -h argument to find out the usage of sdriver.pl: 4

unix> ./sdriver.pl -h
Usage: sdriver.pl [-hv] -t <trace> -s <shellprog> -a <args> Options:
-h -v -t -s -a -g
<trace> <shell> <args>
Print this message Be more verbose
Trace file
Shell program to test
Shell arguments
Generate output for autograder
We have also provided 16 trace files (trace{01-16}.txt) that you will use in conjunction with the shell driver to test the correctness of your shell. The lower-numbered trace files do very simple tests, and the higher-numbered tests do more complicated tests.
You can run the shell driver on your shell using trace file trace01.txt (for instance) by typing: unix> ./sdriver.pl -t trace01.txt -s ./tsh -a ”-p”
(the -a ”-p” argument tells your shell not to emit a prompt), or
unix> make test01
Similarly, to compare your result with the reference shell, you can run the trace driver on the reference shell by typing:
unix> ./sdriver.pl -t trace01.txt -s ./tshref -a ”-p”
or
unix> make rtest01
For your reference, tshref.out gives the output of the reference solution on all races. This might be more convenient for you than manually running the shell driver on all trace files.
The neat thing about the trace files is that they generate the same output you would have gotten had you run your shell interactively (except for an initial comment that identifies the trace). For example:
bass> make test15
./sdriver.pl -t trace15.txt -s ./tsh -a ”-p” #
# trace15.txt - Putting it all together
#
tsh> ./bogus
./bogus: Command not found.
tsh> ./myspin 10
Job (9721) terminated by signal 2
tsh> ./myspin 3 &
[1] (9723) ./myspin 3 &
5

tsh> ./myspin 4 &
[2] (9725) ./myspin 4 &
tsh> jobs
[1] (9723) Running ./myspin 3 & [2] (9725) Running ./myspin 4 & tsh> fg %1
Job [1] (9723) stopped by signal 20 tsh> jobs
[1] (9723) Stopped
[2] (9725) Running
tsh> bg %3
%3: No such job
tsh> bg %1
[1] (9723) ./myspin 3 &
tsh> jobs
[1] (9723) Running
[2] (9725) Running
tsh> fg %1
tsh> quit
bass>
Hints
• Read every word of Chapter 8 (Exceptional Control Flow) in your textbook.
• Use the trace files to guide the development of your shell. Starting with trace01.txt, make sure that your shell produces the identical output as the reference shell. Then move on to trace file trace02.txt, and so on.
• The waitpid, kill, fork, execve, setpgid, and sigprocmask functions will come in very handy. The WUNTRACED and WNOHANG options to waitpid will also be useful.
• When you implement your signal handlers, be sure to send SIGINT and SIGTSTP signals to the entire foreground process group, using ”-pid” instead of ”pid” in the argument to the kill function. The sdriver.pl program tests for this error.
• One of the tricky parts of the lab is deciding on the allocation of work between the waitfg and sigchld_handler functions. We recommend the following approach:
– In waitfg, use a busy loop around the sleep function. – In sigchld_handler, use exactly one call to waitpid.
While other solutions are possible, such as calling waitpid in both waitfg and sigchld_handler, these can be very confusing. It is simpler to do all reaping in the handler.
• In eval, the parent must use sigprocmask to block SIGCHLD signals before it forks the child, and then unblock these signals, again using sigprocmask after it adds the child to the job list
6
./myspin 3 & ./myspin 4 &
./myspin 3 & ./myspin 4 &

by calling addjob. Since children inherit the blocked vectors of their parents, the child must be sure to then unblock SIGCHLD signals before it execs the new program.
The parent needs to block the SIGCHLD signals in this way in order to avoid the race condition where the child is reaped by sigchld_handler (and thus removed from the job list) before the parent calls addjob.
• Programs such as more, less, vi, and emacs do strange things with the terminal settings. Don’t run these programs from your shell. Stick with simple text-based programs such as /bin/ls, /bin/ps, and /bin/echo.
• When you run your shell from the standard Unix shell, your shell is running in the foreground process group. If your shell then creates a child process, by default that child will also be a member of the foreground process group. Since typing ctrl-c sends a SIGINT to every process in the foreground group, typing ctrl-c will send a SIGINT to your shell, as well as to every process that your shell created, which obviously isn’t correct.
Here is the workaround: After the fork, but before the execve, the child process should call setpgid(0, 0), which puts the child in a new process group whose group ID is identical to the child’s PID. This ensures that there will be only one process, your shell, in the foreground process group. When you type ctrl-c, the shell should catch the resulting SIGINT and then forward it to the appropriate foreground job (or more precisely, the process group that contains the foreground job).
Evaluation
Your score will be computed out of a maximum of ** points based on the following distribution:
80 Correctness: 16 trace files at 5 points each.
10 Style points. We expect you to have good comments (5 pts) and to check the return value of EVERY system call (5 pts).
Your solution shell will be tested for correctness on a Linux machine, using the same shell driver and trace files that were included in your lab directory. Your shell should produce identical output on these traces as the reference shell, with only two exceptions:
• The PIDs can (and will) be different.
• The output of the /bin/ps commands in trace11.txt, trace12.txt, and trace13.txt will be different from run to run. However, the running states of any mysplit processes in the output of the /bin/ps command should be identical.
We have provided you with a test le called grade-shlab.pl. Following is the example of correct case:
7

unix> ./grade-shlab.pl -f tsh.c
CS:APP Shell Lab: Grading Sheet for tsh.c
Part 0: Compiling your shell
gcc -Wall -O2 tsh.c -o tsh
gcc -Wall -O2 myspin.c -o myspin gcc -Wall -O2 mysplit.c -o mysplit gcc -Wall -O2 mystop.c -o mystop gcc -Wall -O2 myint.c -o myint
Part 1: Correctness Tests
Checking trace01.txt...
Checking trace02.txt...
Checking trace03.txt...
Checking trace04.txt...
Checking trace05.txt...
Checking trace06.txt...
Checking trace07.txt...
Checking trace08.txt...
Checking trace09.txt...
Checking trace10.txt...
Checking trace11.txt...
Checking trace12.txt...
Checking trace13.txt...
Checking trace14.txt...
Checking trace15.txt...
Checking trace16.txt... Preliminary correctness score: 80
Hand In Instructions
• You only need to commit the tsh.c file to svn server if you modify it.
• Make sure you have included your name and student ID in the header comment of tsh.c.
We strongly recommend you to multiple commit your code to svn during implementation. Good luck! Have fun!
8

請加QQ:99515681  郵箱:99515681@qq.com   WX:codinghelp


 

掃一掃在手機打開當(dāng)前頁
  • 上一篇:合肥搬家 合肥肥東搬家 合肥安穩(wěn)穩(wěn)搬家公司
  • 下一篇:MSc/MEng代做、代寫C/C++語言程序
  • 無相關(guān)信息
    合肥生活資訊

    合肥圖文信息
    流體仿真外包多少錢_專業(yè)CFD分析代做_友商科技CAE仿真
    流體仿真外包多少錢_專業(yè)CFD分析代做_友商科
    CAE仿真分析代做公司 CFD流體仿真服務(wù) 管路流場仿真外包
    CAE仿真分析代做公司 CFD流體仿真服務(wù) 管路
    流體CFD仿真分析_代做咨詢服務(wù)_Fluent 仿真技術(shù)服務(wù)
    流體CFD仿真分析_代做咨詢服務(wù)_Fluent 仿真
    結(jié)構(gòu)仿真分析服務(wù)_CAE代做咨詢外包_剛強度疲勞振動
    結(jié)構(gòu)仿真分析服務(wù)_CAE代做咨詢外包_剛強度疲
    流體cfd仿真分析服務(wù) 7類仿真分析代做服務(wù)40個行業(yè)
    流體cfd仿真分析服務(wù) 7類仿真分析代做服務(wù)4
    超全面的拼多多電商運營技巧,多多開團助手,多多出評軟件徽y1698861
    超全面的拼多多電商運營技巧,多多開團助手
    CAE有限元仿真分析團隊,2026仿真代做咨詢服務(wù)平臺
    CAE有限元仿真分析團隊,2026仿真代做咨詢服
    釘釘簽到打卡位置修改神器,2026怎么修改定位在范圍內(nèi)
    釘釘簽到打卡位置修改神器,2026怎么修改定
  • 短信驗證碼 豆包網(wǎng)頁版入口 破天一劍 目錄網(wǎng) 排行網(wǎng)

    關(guān)于我們 | 打賞支持 | 廣告服務(wù) | 聯(lián)系我們 | 網(wǎng)站地圖 | 免責(zé)聲明 | 幫助中心 | 友情鏈接 |

    Copyright © 2025 hfw.cc Inc. All Rights Reserved. 合肥網(wǎng) 版權(quán)所有
    ICP備06013414號-3 公安備 42010502001045

    国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看
    国产视频999| 99精品99久久久久久宅男| 美国av一区二区三区| 日韩一中文字幕| 无码人妻精品一区二区蜜桃网站 | 久草精品在线播放| 欧美大片欧美激情性色a∨久久| 欧美日韩亚洲一区二区三区四区| 视频在线一区二区| 日本新janpanese乱熟| 99国产视频| 亚洲精品永久www嫩草| 国产精品一区视频| 欧美激情精品久久久| 国产精品中出一区二区三区| 麻豆乱码国产一区二区三区| 精品视频一区二区在线| 麻豆成人在线看| 国产在线视频欧美一区二区三区| 国产精品极品在线| 国产色婷婷国产综合在线理论片a| 久久久精品视频在线观看| 欧洲精品亚洲精品| 久久精品视频va| 久久综合入口| 国产成人精品亚洲精品| 久久精品久久精品亚洲人| 黄页网站大全在线观看| 欧美成人在线影院| 成人国产精品日本在线| 日韩亚洲欧美视频| 久久在线免费观看视频| 欧美影院在线播放| 久久天天躁狠狠躁老女人| 加勒比在线一区二区三区观看| 国产精品啪视频| 欧美日韩亚洲一| 欧美精品做受xxx性少妇| 99久久99| 日本一区精品| 久久人人爽亚洲精品天堂| 国产一区二区在线视频播放| 欧美激情一区二区三级高清视频 | 欧美人与性动交| 99精品一区二区三区的区别| 日本一道本久久| 国产精品视频1区| 国产精品综合久久久久久| 亚洲国产欧美不卡在线观看| 日韩一级裸体免费视频| 国产在线精品自拍| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久免费视频在线观看| 欧美欧美一区二区| 一区二区在线观看网站| 国产激情在线看| 免费观看亚洲视频| 亚洲影影院av| 久热精品视频在线| 97精品国产97久久久久久免费| 欧美一区二区影视| 久久久久国产精品免费网站| 久久久久久久久久久久久国产 | 国产欧亚日韩视频| 色综合久久88色综合天天提莫| 久久九九有精品国产23| av不卡在线免费观看| 欧美综合激情网| 久久伊人精品天天| 久久艳妇乳肉豪妇荡乳av| 精品欧美日韩在线| 亚洲 自拍 另类小说综合图区| 国产精品久久久久久久久久小说| 91.com在线| 国产视频观看一区| 欧美在线激情网| 亚洲一区二区三区欧美| 国产精品久久999| 久久久久无码国产精品一区| 99久久国产免费免费| 精品少妇人欧美激情在线观看 | 一区二区精品在线| 国产精品视频免费一区二区三区| 91精品免费看| 国产日韩一区欧美| 日韩暖暖在线视频| 亚洲国产高清国产精品| 久久99久久99精品免观看粉嫩 | 污污污污污污www网站免费| 欧美日韩国产成人| 久久久精品一区| 国产成人a亚洲精v品无码| 97国产在线播放| 国产人妻互换一区二区| 欧美在线视频观看免费网站| 日韩一区免费观看| 亚洲最大av在线| 欧美日本中文字幕| 国产精品久在线观看| 久久久久久久久久国产| 久久免费视频3| 91精品国产高清自在线| 国产日韩成人内射视频| 激情欧美一区二区三区中文字幕| 日韩精品一区二区三区外面| 亚洲欧美成人一区| 亚洲综合自拍一区| 中文字幕人成一区| 国产99在线|中文| 久久亚洲私人国产精品va| 国产精品无码乱伦| 国产成人免费91av在线| 色偷偷av一区二区三区| 国产v片免费观看| 久久久av水蜜桃| 国产黄色片免费在线观看| 91精品国产91久久久久| 成人av免费在线看| www污在线观看| av免费中文字幕| 国产精品中文字幕在线| 国产精品一区久久久| 国产精品亚洲不卡a| av免费中文字幕| 国产对白在线播放| 国产成人免费91av在线| 国产精品久久久久久久天堂第1集| 国产精品视频一区二区高潮 | 91国偷自产一区二区三区的观看方式| 91精品视频观看| 久久久av水蜜桃| 色偷偷偷亚洲综合网另类 | 成人国内精品久久久久一区| 成人福利网站在线观看11| 成年丰满熟妇午夜免费视频| 91精品国产综合久久久久久蜜臀| 国产黄色片免费在线观看| 九九久久99| 国产精品美女免费| 九九九热精品免费视频观看网站| 中文字幕99| 日韩一区二区高清视频| 日韩欧美第二区在线观看| 狠狠色综合一区二区| 国产日韩在线一区| 91九色视频在线观看| 国产福利成人在线| 久久韩国免费视频| 九九久久国产精品| 午夜精品久久久久久久99热| 青青青青草视频| 蜜桃传媒一区二区| 97国产在线观看| 久久精品久久精品亚洲人| 欧美日韩不卡合集视频| 天天在线免费视频| 欧美久久久久久| 国产伦精品一区二区三区视频黑人| 99在线观看| 日韩视频在线观看免费| 久久成人精品一区二区三区| 一区二区三区四区欧美日韩| 日韩av资源在线| 免费毛片网站在线观看| 成人久久久久久久| 日韩中文字幕在线免费观看| 美女扒开尿口让男人操亚洲视频网站| 亚洲国产婷婷香蕉久久久久久99| 欧美日本亚洲| 99三级在线| 久久精品国产亚洲| 亚洲综合日韩中文字幕v在线| 欧美亚洲在线视频| 二级片在线观看| 久久精品99久久久久久久久| 亚洲欧洲日韩精品| 人人澡人人澡人人看欧美| 国产精品尤物福利片在线观看| 色婷婷久久av| 亚洲欧美精品| 国内伊人久久久久久网站视频| 91久久久久久久| 国产精品女人久久久久久| 天天夜碰日日摸日日澡性色av| 黄色免费观看视频网站| 国产激情美女久久久久久吹潮| 久久国产精品久久久久| 欧美性一区二区三区| 91精品国产99| 欧美精品aaa| 精品人伦一区二区三区| 91成人免费观看网站| 国产精品久久久久久久美男| 日本十八禁视频无遮挡| 国产精品一色哟哟| 国产精品久久久久久久午夜| 日本不卡高清视频一区| 成人国产精品一区二区| 国产精品大陆在线观看| 青青草原一区二区|