Skip to main content

Write a C program that behaves like a shell which displays the command prompt ‘myshell$’. It accepts the command, tokenize the command line and execute it by creating the child process. Also implement the additional command ‘count’ as myshell$ count c filename: It will display the number of characters in given file myshell$ count w filename: It will display the number of words in given file myshell$ count l filename: It will display the number of lines in given file

 

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void make_toks(char *s,char *tok[])
{
    int i=0;
    char *p;
    p=strtok(s, " ");
    while (p!=NULL)
    {
        tok[i++]=p;
        p=strtok(NULL," ");
    }
    tok[i]=NULL;
}

void count(char *fn,char op)
{
    int fh,cc=0,wc=0,lc=0;
    char c;
    fh=open(fn,O_RDONLY);
    if (fh==1)
    {
        printf("File %s not found \n ",fn);
        return;
    }
   
    while (read (fh,&c,1>0))
    {
        if (c==' ')
            wc++;
        else if (c=='\n')
        {
            wc++;
            lc++;
        }
        cc++;
    }
    close(fh);
    switch(op)
    {
        case 'c' : printf("Number of characters : %d \n ",cc-1);
               break;
               
        case 'w' : printf("Number of words : %d \n ",wc);
               break;
               
        case 'l' : printf("Number of Lines : %d \n ",lc+1);
               break;
    }
}

int main()
{
    char buff[80],*args[10];
    int pid;
   
    while(1)
    {
        printf("myshell$");
        fflush(stdin);
        fgets(buff,80,stdin);
        buff[strlen(buff)-1]='\0';
        make_toks(buff,args);
        if (strcmp(args[0],"count")==0)
            count(args[2],args[1][0]);
        else
        {
            pid=fork();
            if (pid > 0)
                wait();
            else
            {
                if (execvp(args[0],args)==-1)
                    printf("Bad Command\n");
            }
        }
    }
    return 0;
}

Comments

Popular posts from this blog

Write a program to read book information (bookid, bookname, bookprice, bookqty) in file “book.dat”. Write a menu driven program to perform the following operations using Random access file: i. Search for a specific book by name. ii. Display all book and total cost

  import java . io .*; import java . util .*; class Book {       String name , id ;       int qty ;       double price , total ;       Book ( String i , String n , String p , String q )      {               name = n ;               id = i ;               qty = Integer . parseInt ( q );               price = Double . parseDouble ( p );               total = qty * price ;      }       public String toString ()      {               System . out . println ( "name\t id\t qty\t price\t total" );               String s = name + "\t" + id + "\t" + qty + "\t" + price + "\t" + total ;           ...

Define a class MyDate (day, month, year) with methods to accept and display a MyDate object. Accept date as dd, mm, yyyy. Throw user defined exception “InvalidDateException” if the date is invalid. Examples of invalid dates : 03 15 2019, 31 6 2000, 29 2 2021

  import java . io .*; import java . util .*; class InvalidDateException extends Exception {       InvalidDateException ()       {               System . out . println ( "Invalid Date" );       } } class MyDate {       int day , mon , yr ;       void accept ( int d , int m , int y )       {             day = d ;             mon = m ;             yr = y ;       }       void display ()       {             System . out . println ( "Date is valid : " + day + "/" + mon + "/" + yr );       } } class Date {       public static void main ( String args []) throws Exception       {             Scanner sc = new Sca...

Write a Java program to design a screen using Awt that will take a user name and password. If the user name and password are not same, raise an Exception with appropriate message. User can have 3 login chances only. Use clear button to clear the TextFields.

  import java . awt .*; import java . awt . event .*; import javax . swing .*; class InvalidPasswordException extends Exception {       InvalidPasswordException ()       {             System . out . println ( "Username and password is not same" );       } } public class Password extends Frame implements ActionListener {       Label uname , upass ;       TextField nametext ;       TextField passtext , msg ;       Button login , Clear ;       Panel p ;       int attempt = 0 ;       char c = '*' ;             public void login ()       {             p = new Panel ();             uname = new Label ( "Username : " , Label . CENTER );             upass = n...