我正在设计一个模拟shell程序,我无法完全模仿“cd”命令。我试过chdir(),但那不起作用,所以我继续试图改变环境变量“PWD =”
这就是我所拥有的,我认为这可能很接近。 (如果我错了或与chdir()接近,请拜托,纠正我)
else if (command == "cd")
{
string pathEnv = "PWD=";
string newDir;
cin >> newDir;
pathEnv+=newDir;
cout << pathEnv << endl;
putenv(pathEnv.c_str());
}
希望命令是“cd / user / username / folder”,而我的pathEnv变量将是“PWD = / user / username / folder”,这可能会改变目录?
非常感谢任何见解。
答案 0 :(得分:5)
chdir()应该是您正在寻找的命令。在设置后,您是否使用getcwd()来获取当前工作目录?
以下代码对我有用。
#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
}
}
getcwd()有三个版本:
char *getcwd(char *buf, size_t size);
char *getwd(char *buf);
char *get_current_dir_name(void);
有关使用的详细信息,请参阅unix手册页。
答案 1 :(得分:1)
您总是希望在代码中使用系统调用,而不是“模拟”系统可能正在执行的操作,例如更改PWD。如果您使用的是高级UNIX系统,则应使用chdir
或在Windows Box上使用SetCurrentDirectory
调用。我不是Windows开发人员,但是我发现了这个链接。 http://msdn.microsoft.com/en-us/library/windows/desktop/aa363806%28v=vs.85%29.aspx