Directions Modify your code below so that it implements the
Directions:
Modify your code below so that it implements the following internal commands:
1. pwd Print current working directory.
2. cd [dir] Change directories.
3. exit Terminates the shell
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <readline/readline.h>
#include <readline/history.h>
#include <curses.h>
#include <string.h>
extern char **environ;
int main(int argc, char **argv)
{
char *s;
char *token;
int count = 0;
int command = -1;
char *name;
while ((s=readline(\"prompt>\")) != NULL) // reads from the command line
{
token = strtok(s, \" \"); // calls the strtoks function
while(token != NULL) //Running through the loop
{
if (count == 0)
{
if (strcmp (token, \"set\") == 0) //set command
{
command = 1;
}
else if (strcmp (token, \"delete\") == 0) //delete command
{
command = 2;
}
else if (strcmp (token, \"print\") == 0) //print command
{
command = 3;
}
}
else if (count == 1) // Goes through the while loop
{
if (command == 1) //set the value of of the enviornment variable with varname
{
name = token;
}
else if (command == 2) //removes the enviorment variable
{
unsetenv(token);
}
else if (command == 3)//prints the environment variable
{
printf(\"%s = %s\ \",token,getenv(token));
}
}
else if (count == 2)
{
}
else if (count == 3) //sets the value of the variable name
{
setenv(name, token, 1);
}
token = strtok(NULL, \" \");
count++;
}
count = 0;
add_history(s); /* adds the line to the readline history buffer */
free(s); /* clean up! */
}
return(0);
}
Solution
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <readline/readline.h>
#include <readline/history.h>
#include <curses.h>
#include <string.h>
extern char **environ;
int main(int argc, char **argv)
{
char *s;
char *token;
int count = 0;
int command = -1;
char *name;
//Added these lines.
chdir(\"/path/to/change/directory/to\");
getcwd(cwd, sizeof(cwd));
while ((s=readline(\"prompt>\")) != NULL) // reads from the command line
{
token = strtok(s, \" \"); // calls the strtoks function
while(token != NULL) //Running through the loop
{
if (count == 0)
{
if (strcmp (token, \"set\") == 0) //set command
{
command = 1;
}
else if (strcmp (token, \"delete\") == 0) //delete command
{
command = 2;
}
else if (strcmp (token, \"print\") == 0) //print command
{
command = 3;
}
}
else if (count == 1) // Goes through the while loop
{
if (command == 1) //set the value of of the enviornment variable with varname
{
name = token;
}
else if (command == 2) //removes the enviorment variable
{
unsetenv(token);
}
else if (command == 3)//prints the environment variable
{
printf(\"%s = %s\ \",token,getenv(token));
}
}
else if (count == 2)
{
}
else if (count == 3) //sets the value of the variable name
{
setenv(name, token, 1);
}
token = strtok(NULL, \" \");
count++;
}
count = 0;
add_history(s); /* adds the line to the readline history buffer */
free(s); /* clean up! */
}
return(0);
}
![Directions: Modify your code below so that it implements the following internal commands: 1. pwd Print current working directory. 2. cd [dir] Change directories Directions: Modify your code below so that it implements the following internal commands: 1. pwd Print current working directory. 2. cd [dir] Change directories](/WebImages/30/directions-modify-your-code-below-so-that-it-implements-the-1084172-1761569800-0.webp)
![Directions: Modify your code below so that it implements the following internal commands: 1. pwd Print current working directory. 2. cd [dir] Change directories Directions: Modify your code below so that it implements the following internal commands: 1. pwd Print current working directory. 2. cd [dir] Change directories](/WebImages/30/directions-modify-your-code-below-so-that-it-implements-the-1084172-1761569800-1.webp)
![Directions: Modify your code below so that it implements the following internal commands: 1. pwd Print current working directory. 2. cd [dir] Change directories Directions: Modify your code below so that it implements the following internal commands: 1. pwd Print current working directory. 2. cd [dir] Change directories](/WebImages/30/directions-modify-your-code-below-so-that-it-implements-the-1084172-1761569800-2.webp)