Question: Should be written in C. Name your source code file sh.c ROLL YOUR OWN Write a simple shell. Your shell should prompt the user for
Should be written in C.
Name your source code file sh.c
ROLL YOUR OWN
Write a simple shell. Your shell should prompt the user for a command, run it, then prompt the user for their next command. If the user types "exit", then the shell should terminate. The shell should ignore Ctrl-C.
Inside the attached parse.h header file, there is a parse function that you can use to split up the command line into separate strings. Recall that execvp accepts two arguments: the name of the command, and then an array of command-line arguments as strings. The parse() function in parse.h accepts the string and returns the array of argument strings.
You can use parse.h or roll your own parse function.
PARSE.H
// splits input into separate strings
// inputs: input: a string to split up, args: an array of char pointers to
// store the separate strings
// outputs: an array of strings, with null in the last element, passed back
// through args
// preconditon: input is a valid c-string, read from the keyboard using fgets
// postcondition: args contains the separate strings, one
// string per element. Last element contains null
#ifndef PARSE_H
#define PARSE_H
#include "string.h"
static void parse( char* input, char* args[] )
{
int i = 0;
// fgets reads the , so overwrite it
input[strlen(input)-1] = '\0';
// get the first token
args[i] = strtok( input, " " );
// get the rest of them
while( ( args[++i] = strtok(NULL, " ") ) );
}
#endif
HINTS:
o Remember the logic for the shell :
while input != exit parse the command fork if parent process : wait else execvp command
o You'll need the chdir system call to add support for cd. This needs to be part of the shell as their is no cd system command.
o man chdir, execvp, wait, fork, strtok
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
