previous | start | next

Initial Shell Code - main

    1   /*
    2    * main - The shell's main routine 
    3    */
    4   int main(int argc, char **argv) 
    5   {
    6       char c;
    7       char cmdline[MAXLINE];
    8       int emit_prompt = 1; /* emit prompt (default) */
    9   
   10       /* Redirect stderr to stdout (so that driver will get all output
   11        * on the pipe connected to stdout) */
   12       dup2(1, 2);
   13   
   14       /* Parse the command line */
   15       while ((c = getopt(argc, argv, "hvp")) != EOF) {
   16           switch (c) {
   17           case 'h':             /* print help message */
   18               usage();
   19               break;
   20           case 'v':             /* emit additional diagnostic info */
   21               verbose = 1;
   22               break;
   23           case 'p':             /* don't print a prompt */
   24               emit_prompt = 0;  /* handy for automatic testing */
   25               break;
   26           default:
   27               usage();
   28           }
   29       }
   30   
   31       /* Install the signal handlers */
   32       
   33       /* This is the signal handler you will need to implement for the shell */
   34       Signal(SIGCHLD, sigchld_handler);  /* Terminated or stopped child */
   35   
   36       /* The signal handlers for SIGINT and SIGTSTP should just return */
   37       Signal(SIGINT,  sigint_handler);   /* ctrl-c */
   38       Signal(SIGTSTP, sigtstp_handler);  /* ctrl-z */
   39       
   40   
   41       /* This one provides a clean way to kill the shell. Do not change this! */
   42       Signal(SIGQUIT, sigquit_handler); 
   43   
   44       /* Your shell will ignore these:*/
   45       Signal(SIGTTOU, SIG_IGN);
   46       Signal(SIGTTIN, SIG_IGN);
   47   
   48   
   49   
   50       /* Initialize the job list */
   51       initjobs(jobs);
   52   
   53       /* Execute the shell's read/eval loop */
   54       while (1) {
   55   
   56           /* Read command line */
   57           if (emit_prompt) {
   58               printf("%s", prompt);
   59               fflush(stdout);
   60           }
   61           if ((fgets(cmdline, MAXLINE, stdin) == NULL) && ferror(stdin)) {
   62               app_error("fgets error");
   63           }
   64           if (feof(stdin)) { /* End of file (ctrl-d) */
   65               fflush(stdout);
   66               exit(0);
   67           }
   68   
   69           /* Evaluate the command line */
   70           eval(cmdline);
   71           fflush(stdout);
   72           fflush(stdout);
   73       } 
   74   
   75       exit(0); /* control never reaches here */
   76   }


previous | start | next