首页
网站开发
桌面应用
管理软件
微信开发
App开发
嵌入式软件
工具软件
数据采集与分析
其他
首页
>
> 详细
辅导ICS 53编程设计、讲解program程序、c/c++,Java编程语言辅导 辅导R语言编程|讲解Database
项目预算:
开发周期:
发布时间:
要求地区:
ICS 53, Winter 2021
Assignment 2: A Simple Shell
A shell is a program which allows a user to send commands to the operating system (OS), and allows the
OS to respond to the user by printing output to the screen. The shell allows a simple character-oriented
interface in which the user types a string of characters (terminated by pressing the Enter(\n)) and the OS
responds by printing lines of characters back to the screen.
Typical Shell Interaction
The shell executes the following basic steps in a loop.
1. The shell prints a “prompt>” to indicate that it is waiting for instructions.
prompt>
2. The user types a command, terminated with an
character (‘\n’). All commands are of
the form COMMAND [arg1] [arg2] ... [argn].
prompt> ls
3. The shell executes the chosen command and passes any arguments to the command. The
command prints results to the screen. Typical printed output for an ls command is shown below.
hello.c hello testprog.c testprog
Types of commands that your shell must support
There are two types of commands, built-in commands which are performed directly by the shell, and
general commands which indicate compiled programs which the shell should cause to be executed.
Your shell will support five built-in commands: jobs, bg, fg, kill, and quit. You shell must also support
general commands.
General commands can indicate any compiled executable. We will assume that any compiled executable
used as a general command must exist in the current directory. The general command typed at the shell
prompt is the name of the compiled executable, just like it would be for a normal shell. For example, to
execute an executable called hello the user would type the following at the prompt:
prompt> hello
Built-in commands are to be executed directly by the shell process and general commands should be
executed in a child process which is spawned by the shell process using a fork command. Be sure to reap
all terminated child processes.
Job Control
A job is a process that is created (forked) from the shell process. Each job is assigned a sequential job ID
(JID). Because a job is also a process, each job has an associated process ID (PID). There are three types
of job statuses:
• Foreground: When you enter a command in a terminal window, the command occupies that
terminal window until it completes. This is a foreground job.
Prompt > hello
• Background: When you enter an ampersand (&) symbol at the end of a command line, the
command runs without blocking the terminal window. The shell prompt is displayed
immediately after you press Return. This is an example of a background job.
Prompt > hello &
• Stopped: If you press ctrl-Z while a foreground job is executing, the job stops. This job is called a
stopped job and it can be restarted later by the receipt of a SIGCONT signal.
Any built-in command is always executed in the foreground. When a command is executed in the
foreground, the shell process must wait for the child process to complete. Please note that only one job
can run in the foreground while many can run 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 the process which is 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 the process which is 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.
Built-In Commands
• jobs: List the running and stopped background jobs. Status can be “Running”, “Foreground”,
and “Stopped”. Format is following.
[
] (
)
prompt> jobs
[1] (30522) Running hello &
[2] (30527) Stopped sleep
• fg
: Change a stopped or running background job to a running in the foreground.
There can only be one foreground job at a time, so the previous foreground job should be
stopped. A user may use either job_id or pid. In case job_id is used, the JID must be preceded
by the “%” character.
prompt> fg %1
prompt> fg 30522
• bg
: Change a stopped background job to a running background job.
• kill
: Terminate a job by sending it a SIGINT signal. Be sure to reap a terminated
process.
• quit: Ends the shell process.
I/O redirection
Your shell must support I/O redirection.
Most command line programs that display their results do so by sending their results to standard output
(display). However, before a command is executed, its input and output may be redirected using a
special notation interpreted by the shell. To redirect standard output to a file, the ">" character is used
like this:
prompt> ls > file_list.txt
In this example, the ls command is executed and the results are written in a file named file_list.txt. Since
the output of ls was redirected to the file, no results appear on the display. Each time the command
above is repeated, file_list.txt is overwritten from the beginning with the output of the command ls. To
redirect standard input from a file instead of the keyboard, the "<" character is used like this:
prompt> sort < file_list.txt
In the example above, we used the sort command to process the contents of file_list.txt. The results are
output on the display since the standard output was not redirected. We could redirect standard output
to another file like this:
prompt> sort < file_list.txt > sorted_file_list.txt
I/O redirection Authorization
We should add permission bit when we do I/O Redirection. Permission bits control who can read or
write the file. https://www.gnu.org/software/libc/manual/html_node/Permission-Bits.html
• Input redirection to “input.txt” (Read)
mode_t mode = S_IRWXU | S_IRWXG | S_IRWXO;
inFileID = open (“input.txt”, O_RDONLY, mode);
dup2(inFileID, STDIN_FILENO);
• Output redirection to “out.txt” (Create or Write)
outFileID = open (“out.txt”, O_CREAT|O_WRONLY|O_TRUNC, mode);
dup2(outFileID, STDOUT_FILENO);
Submission Instructions
Your source code should be a single c file named ‘hw2.c’. Submissions will be done through Gradescope.
You have already been added on the Gradescope course for ICS53. Please login to with your school (UCI)
email to access it. Please remember that each C program should compile and execute properly on
openlab.ics.uci.edu when it is compiled using the gcc compiler version 4.8.5. The only compiler switch
which will be used is -o (to change the name of the executable).
Specific directions
• Headers:
stdio.h, string.h, unistd.h, stdlib.h, sys/stat.h, sys/types.h, sys/wait.h, ctype.h, signal.h, fcntl.h
* As long as you can compile it on openlab (gcc 4.8.5) without any additional compiler flags, you can use any
headers other than those specified.
• MaxLine: 80, MaxArgc: 80, MaxJob: 5
• Use both execvp() and execv() to allow either case.
execvp() : Linux commands {ls, cat, sort, ./hellp, ./slp}.
execv() : Linux commands {/bin/ls, /bin/cat, /bin/sort, hello, slp}.
Example 1
1. Create 2 programs, add.c and counter.c, and compile them.
< add.c >
int main(int argc, char * argv[]){
int n = atoi(argv[1]);
printf("%d \n", n+2); // print n+2
return 0;
}
int main() {
unsigned int i = 0;
while(1)
{
printf("Counter: %d\n", i);
i++;
sleep(1);
}
}
$gcc add.c -o add
$gcc counter.c -o counter
Now we have compiled executables, “add” and “counter”. ^Z in below == ctrl-Z
Example 2
Prepare two terminals on the same server.
[Terminal1]
ssh
@openlab.ics.uci.edu
You will see your server name e.g.
@circinus-14
circinus-14 is your current server name in this case.
[Terminal2]
ssh
@
.ics.uci.edu
e.g. ssh
@circinus-14.ics.uci.edu
In this way you can access to the same server using two terminals.
1. [Terminal1] Run your shell
2. [Terminal1] prompt> counter
3. [Terminal1] ctrl-z
4. [Terminal1] jobs
[1] (
) Stopped counter
5. [Terminal2] ps -e | grep “counter”
pts/0 00:00:01 counter
6. [Terminal1] kill
7. [Terminal1] jobs
No output
8. [Terminal2] ps -e | grep “counter”
No output
< Terminal 1 >
If you can still see “
pts/0 00:00:01 counter” after kill,
it means that you did not properly terminate a child process.
References
“Understanding the job control commands in Linux – bg, fg and CTRL+Z“, Understanding the job control
commands in Linux – bg, fg and CTRL+Z”, accessed Jan 10,
https://www.thegeekdiary.com/understanding-the-job-control-commands-in-linux-bg-fg-and-ctrlz/
软件开发、广告设计客服
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-23:00
微信:codinghelp
热点项目
更多
代做ceng0013 design of a pro...
2024-11-13
代做mech4880 refrigeration a...
2024-11-13
代做mcd1350: media studies a...
2024-11-13
代写fint b338f (autumn 2024)...
2024-11-13
代做engd3000 design of tunab...
2024-11-13
代做n1611 financial economet...
2024-11-13
代做econ 2331: economic and ...
2024-11-13
代做cs770/870 assignment 8代...
2024-11-13
代写amath 481/581 autumn qua...
2024-11-13
代做ccc8013 the process of s...
2024-11-13
代写csit040 – modern comput...
2024-11-13
代写econ 2070: introduc2on t...
2024-11-13
代写cct260, project 2 person...
2024-11-13
热点标签
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
联系我们
- QQ: 9951568
© 2021
www.rj363.com
软件定制开发网!