辅导ICS 53编程设计、 写作program程序

” 辅导ICS 53编程设计、 写作program程序ICS 53, Winter 2021Assignment 2: A Simple ShellA shell is a program which allows a user toSend commands to the operating system (OS), and allows theOS to respond to the user by printing output to the screen. The shell allows a simple character-orientedinterface in which the user types a string of characters (terminated by pressing the Enter(\n)) and the OSresponds by printing lines of characters back to the screen.Typical Shell InteractionThe shell executes the following Basic steps in a loop.1. The shell prints a prompt to indicate that it is waiting for instructions.prompt2. The user types a command, terminated with an ENTER character (\n). All commands are ofthe form COMMAND [arg1] [arg2] … [argn].prompt ls3. The shell executes the chosen Command and passes any arguments to the command. Thecommand prints results to the screen. Typical printed output for an ls command is shown below.hello.c hello testprog.c testprogTypes of commands that your shell must supportThere are two types of commands, built-in commands which are performed directly by the shell, andgeneral 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 supportgeneral commands.General commands can indicate any compiled executable. We will assume that any compiled executableused as a general command must exist in the current directory. The general command typed at the shellprompt is the name of the compiled executable, just like it would be for a normal shell. For example, toexecute an executable called hello the user would type the following at the prompt:prompt helloBuilt-in commands are to be executed Directly by the shell process and general commands should beexecuted in a child process which is spawned by the shell process using a fork command. Be sure to reapall terminated child processes.Job ControlA 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 typesof job statuses: Foreground: When you enter a command in a terminal window, the command occupies thatterminal 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, thecommand runs without blocking the terminal window. The shell prompt is displayedimmediately 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 astopped 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 theforeground, the shell process must wait for the child process to complete. Please note that only one jobcan 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 betweenbackground and foreground, and to change the Process state (running, stopped, or terminated) of theprocesses in a job. Typing ctrl-C causes a SIGINT signal to be delivered to the process which is theforeground job. The default action for SIGINT is to terminate the process. Similarly, typing ctrl-Z causes aSIGTSTP signal to be delivered to the process which is the foreground job. The default action for SIGTSTPis to place a process in the stopped state, where it remains until it is awakened by the receipt of aSIGCONT signal.Built-In Commands jobs: List the running and stopped Background jobs. Status can be Running, Foreground,and Stopped. Format is following.[job_id] (pid) status command_lineprompt jobs[1] (30522) Running hello [2] (30527) Stopped sleep fg job_id|pid: 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 bestopped. A user may use either job_id or pid. In case job_id is used, the JID must be precededby the character.prompt fg %1prompt fg 30522 bg job_id|pid: Change a stopped background job to a running background job. kill job_id|pid: Terminate a job by sending it a SIGINT signal. Be sure to reap a terminatedprocess. quit: Ends the shell process.I/O redirectionYour 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 aspecial notation interpreted by the Shell. To redirect standard output to a file, the character is usedlike this:prompt ls file_list.txtIn this example, the ls command is executed and the results are written in a file named file_list.txt. Sincethe output of ls was redirected to the file, no results appear on the display. Each time the commandabove is repeated, file_list.txt is overwritten from the beginning with the output of the command ls. Toredirect standard input from a file instead of the keyboard, the character is used like this:prompt sort file_list.txtIn the example above, we used the sort command to process the contents of file_list.txt. The results areoutput on the display since the Standard output was not redirected. We could redirect standard outputto another file like this:prompt sort file_list.txt sorted_file_list.txtI/O redirection AuthorizationWe should add Permission bit when we do I/O Redirection. Permission bits control who can read orwrite the file. httpss://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 InstructionsYour 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 onopenlab.ics.uci.edu when it is compiled using the gcc compiler version 4.8.5. The only compiler switchwhich 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 anyheaders 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 11. 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+2return 0;}counter.cint main() {unsigned int i = 0;while(1){Printf(Counter: %d\n, i);i++;sleep(1);}}$gcc add.c -o add$gcc counter.c -o counterNow we have compiled executables, add and counter. ^Z in below == ctrl-ZExample 2Prepare two terminals on the same server.[Terminal1]ssh your_id@openlab.ics.uci.eduYou will see your server name e.g. your_id@circinus-14circinus-14 is your current server name in this case.[Terminal2]ssh your_id@server_name.ics.uci.edue.g. ssh your_id@circinus-14.ics.uci.eduIn this way you can access to the same server using two terminals.1. [Terminal1] Run your shell2. [Terminal1] prompt counter3. [Terminal1] ctrl-z4. [Terminal1] jobs[1] (a_pid) Stopped counter5. [Terminal2] ps -e | grep countera_pid pts/0 00:00:01 counter6. [Terminal1] Kill a_pid7. [Terminal1] jobsNo output8. [Terminal2] ps -e | grep counterNo output Terminal 1 Terminal 2 If you can still see a_pid pts/0 00:00:01 counter after kill,it means that you Did not properly terminate a child process.ReferencesUnderstanding the job control commands in Linux bg, fg and CTRL+Z, Understanding the job controlcommands in Linux bg, fg and CTRL+Z, accessed Jan 10, httpss://www.thegeekdiary.com/understanding-the-job-control-commands-in-linux-bg-fg-and-ctrlz/如有需要,请加QQ:99515681 或WX:codehelp

添加老师微信回复‘’官网 辅导‘’获取专业老师帮助,或点击联系老师1对1在线指导