I'm designing a mock shell program, and I can't quite mimic the "cd" command. I've tried chdir(), but that wasn't working, so I moved on to trying to change the environmental variable "PWD="
Here's what I have, and I think this may be close. (Please, please, correct me if I'm wrong or was closer with chdir())
else if (command == "cd")
{
string pathEnv = "PWD=";
string newDir;
cin >> newDir;
pathEnv+=newDir;
cout << pathEnv << endl;
putenv(pathEnv.c_str());
}
Hopefully the command would be 'cd /user/username/folder' and my pathEnv variable would be "PWD=/user/username/folder" which would maybe change the directory?
Any insight is greatly appreciated.
chdir() should be the command you are looking for. Did you use getcwd() to fetch the current working directory after you set it?
Here is the code which worked for me.
#include <iostream>
#include <string>
#include <sys/param.h>
#include <unistd.h>
...
if (command == "curr") {
char buffer[MAXPATHLEN];
char *path = getcwd(buffer, MAXPATHLEN);
if (!path) {
// TODO: handle error. use errno to determine problem
} else {
string CurrentPath;
CurrentPath = path;
cout << CurrentPath << endl;
}
} else if (command == "cd") {
string newDir;
cin >> newDir;
int rc = chdir(newDir.c_str());
if (rc < 0) {
// TODO: handle error. use errno to determine problem
}
}
There are three versions of getcwd():
char *getcwd(char *buf, size_t size);
char *getwd(char *buf);
char *get_current_dir_name(void);
please consult the man page in unix for details of usage.