Machine Problem 1
Machine Problem 1
157
copied and the name of the copied file. The program will then create
an ordinary pipe and write the contents of the file to be copied to the
pipe. The child process will read this file from the pipe and write it to
the destination file. For example, if we invoke the program as follows:
Programming Projects
Project 1 UNIX Shell and History Feature
This project consists of designing a C program to serve as a shell interface
that accepts user commands and then executes each command in a separate
process. This project can be completed on any Linux, UNIX, or Mac OS X system.
A shell interface gives the user a prompt, after which the next command
is entered. The example below illustrates the prompt osh> and the users
next command: cat prog.c. (This command displays the file prog.c on the
terminal using the UNIX cat command.)
158
Chapter 3 Processes
#include <stdio.h>
#include <unistd.h>
#define MAX LINE 80 /* The maximum length command */
int main(void)
{
char *args[MAX LINE/2 + 1]; /* command line arguments */
int should run = 1; /* flag to determine when to exit program */
while (should run) {
printf("osh>");
fflush(stdout);
/**
* After reading user input, the steps are:
* (1) fork a child process using fork()
* (2) the child process will invoke execvp()
* (3) if command included &, parent will invoke wait()
*/
}
return 0;
}
Figure 3.36 Outline of simple shell.
args[0] = "ps"
args[1] = "-ael"
args[2] = NULL
This args array will be passed to the execvp() function, which has the
following prototype: