Sunday, 17 July 2016

Program 1: Shell supporting 20 commands

MTech Advanced Operating Systems Lab (14SCS16)(1st sem)

Design and Develop a shell that should support at least 20 commands.


#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
void parse(char *cmd, char  **arguvec)
{
            while(*cmd != '\0')
            {
                        while( *cmd == '  ' || *cmd == '\t' || *cmd == '\n')
                                    *cmd++='\0';
                        *arguvec++=cmd;
                        while(*cmd != '\0' && *cmd != '  ' && *cmd != '\t' && *cmd != '\n')
                                    cmd++;
            }
            *arguvec = '\0';
}
void cmdexecutes(char **arguvec)
{
            pid_t pid;
            int status;
            pid = fork();
            if(pid < 0)
            {
                        printf("\n error in creating fork");
                        exit(0);
            }
            else if(pid == 0)
            {
                        if(execvp (*arguvec, arguvec) < 0)
                        {
                                    printf("\n error in calling exec");
                                    exit(0);
                        }
            }

            else
            {
                        while(wait(&status) != pid);
            }
}
int main()
{
            char cmd[1024];
            char *arguvec[20];
            while(1)
            {
                        printf("[MYSHELL]");
                        gets(cmd);
                        parse(cmd, arguvec);
                        if( strcmp(arguvec[0], "exit") == 0)
                        {
                                    exit(0);
                        }
                        cmdexecutes(arguvec);
            }
            return 0;
}



Output:
ubuntu@ubuntu-VirtualBox:~/lab$ gedit 1.c
ubuntu@ubuntu-VirtualBox:~/lab$ cc 1.c
ubuntu@ubuntu-VirtualBox:~/lab$ ./a.out
[MYSHELL]ls
1.c  1.c~  a.out

[MYSHELL]who
ubuntu   tty7         2015-11-25 09:04
ubuntu   pts/1        2015-11-25 09:27 (:0)

[MYSHELL]ps
 PID    TTY          TIME         CMD
 2610   pts/1                00:00:01          bash
 2825   pts/1                00:00:00          a.out
 2828   pts/1   00:00:00          ps

[MYSHELL]date
Wed Nov 25 09:38:46 IST 2015

[MYSHELL]cal
  November 2015     
Su Mo Tu We Th Fr Sa 
 1  2  3  4  5  6  7 
 8  9 10 11 12 13 14 
15 16 17 18 19 20 21 
22 23 24 25 26 27 28 
29 30                

 [MYSHELL]pwd
/home/ubuntu/lab

[MYSHELL]