4

我正在设计一个模拟 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”,这可能会改变目录?

非常感谢任何见解。

4

2 回答 2

7

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 中的手册页。

于 2012-05-29T01:53:47.460 回答
1

您将始终希望在代码中使用系统调用,而不是“模拟”系统可能正在执行的操作,例如更改 PWD。如果您使用的是高级 UNIX 系统,则应该使用chdir,或者如果使用的是 Windows Box,请SetCurrentDirectory调用。我不是 Windows 开发人员,哇,但我找到了这个链接。http://msdn.microsoft.com/en-us/library/windows/desktop/aa363806%28v=vs.85%29.aspx

于 2012-05-29T20:23:03.600 回答