i wrote this shell given below. please i need any suggestions and assistance in making this created shell support the following commands: cp (copy), del (delete), hos (prints the hostname of the machine), cd (changes directory), clr (clears the screen), dir (lists contents in directory), environ(lists the environment setting), echo (displays comment followed by a new line), help (displays the help associated with my shell) and quit ( exits the shell). please would be very grateful anyones attention shown too this. thank you

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

main ()
{
	char buf [1024];
	char *args [64];

	for (;;)
	{
	/*
	 *prompt for and read a command.
	 */
	printf ("Command:");

	if (gets (buf) == NULL)
	{
	printf ("\n");
	exit (0);
	}

	/*
	 * Split the string into Arguments.
	 */
	parse (buf, args);

	/*
	 * Execute the command.
	 */
	execute (args);
	} // endof for loop
}

/* parse -- Splits the command in buf into individual arguments */
parse (buf, args)
char *buf;
char **args;
{
	  while (*buf != NULL)
	{
	/*
	 *Strip White Spaces. Use Nulls, so
	 *that the previous argument is terminated automatically
	 */
	  while ((*buf == ' ') || (*buff == '\t'))
		*buf++ = NULL;

	/* Save the Argument. */
	 *args++ = buf;

	/* Skip over the argument. */
	 while ((* != NULL) && (*buf != ' ' ) && (*buf != '\t'))
	 buf++;
	}
	
	*args= NULL;
}

/* execute -- spawns a child process and execute the program */
execute (args)
char **args;
{
	int pid,status;

	/* Get a child process */

	if ((pid= fork()) <0)
	{	{
	perror("fork");
	exit (1);
	/* NOTE. perror() produces a short error message on the standard
	   error describing the last error encountered during a call to a
	   system or library function */
	}

	/*
	 * The Child executes the code inside the if
	 */
	if (pid == 0)
	{
	execvp (*args, args);
	perror (*args);
	exit (1)

/* NOTE. The execv() and execvp versions of execl() are useful when the number
 of arguments are unknown in advance:

The arguments to execv() abd execvp() are the name of the file to be executed
and a vector of strings containing the arguments. The last argument string must
be followed by a 0 pointer.

execlp() and execvp() are called with the same arguments as execl() and execv(),
but duplicate the shell's actions in searching for an executable file
environment. */

   ?* The parent executes the wait. */
	
	while (wait (&status) !=pid)
	 /*empty */

}

Recommended Answers

All 3 Replies

> i wrote this shell given below.
I very much doubt it. I've seen the basic outline many times before.
It looks like boilerplate homework for you to fill in the blanks of your assignment yourself.

okay is it possible too push me in the right direction. hoping thats not to much of assistance

if statements and strcmp() calls spring to mind.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.