Operating Systems - Projects and Exercises


The left arrow above will return you to the Home page
The left arrows below will return you to the Previous page

Go back top
  strtokeg - skeleton shell using strtok to parse command line
    reads in a line of keyboard input at a time, parsing it into
    tokens that are separated by white spaces (set by #define

    can use redirected input
    if the first token is a recognized internal command, then that
    command is executed. otherwise the tokens are printed on the
    internal commands:
        clear - clears the screen
        quit - exits from the program
   version: 1.0
   date:    December 2003
   author:  Ian G Graham
            School of Information Technology
            Griffith University, Gold Coast
   copyright (c) Ian G Graham, 2003. All rights reserved.
   This code can be used for teaching purposes, but no warranty,
   explicit or implicit, is provided.
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#define MAX_BUFFER 1024                        // max line buffer
#define MAX_ARGS 64                            // max # args
#define SEPARATORS " \t\n"                     // token sparators
int main (int argc, char ** argv)
    char buf[MAX_BUFFER];                      // line buffer
    char * args[MAX_ARGS];                     // pointers to arg strings
    char ** arg;                               // working pointer thru args
    char * prompt = "==>" ;                    // shell prompt

/* keep reading input until "quit" command or eof of redirected input */
    while (!feof(stdin)) { 
/* get command line from input */
        fputs (prompt, stdout);                // write prompt
        if (fgets (buf, MAX_BUFFER, stdin )) { // read a line
/* tokenize the input into args array */

            arg = args;
            *arg++ = strtok(buf,SEPARATORS);   // tokenize input
            while ((*arg++ = strtok(NULL,SEPARATORS)));
                                               // last entry will be NULL 
            if (args[0]) {                     // if there's anything there
/* check for internal/external command */

                if (!strcmp(args[0],"clear")) { // "clear" command
                if (!strcmp(args[0],"quit"))   // "quit" command
                    break;                     // break out of 'while' loop

/* else pass command onto OS (or in this instance, print them out) */

                arg = args;
                while (*arg) fprintf(stdout,"%s ",*arg++);
                fputs ("\n", stdout);
    return 0; 
Go back top

For use only by students and instructors using the supplementary material available with the text book: "Operating Systems - Internals and Design Principles", William Stallings, Prentice Hall, 5th Edition, 2004. Not to be printed out or copied by any other persons or used for any other purpose without written permission of the author(s).