嘿,我正在用C作为学校项目设计我的shell。但是我在这个shell中坚持使用cd命令。
以下是相关说明:
cd <directory>
- 将当前默认目录更改为<directory>
。 `如果 报告当前目录时,
<directory>
参数不存在。如果目录 不存在应报告的适当错误。你需要支持亲戚和 绝对路径。此命令还应更改PWD环境变量。
我得到这样的道路:
const char *path = getenv("PATH");//get the system's path
以下是我打算填写的主要内容:
else if(strcmp(argsexec[0], "cd") == 0) {
if(argsexec[1]== NULL){
system("pwd");//Reporting current directory.
}
else if(strcmp(argsexec[1],"..") == 0);
/**HERE Go to upper directory.
}
else {
/**HERE Case for cd <directory> go to that directory
}
}
如何实现这些HERE部分?
答案 0 :(得分:2)
您可以使用这些功能来实现您的功能:
char *getcwd(char *buf, size_t size);
char *getwd(char *buf);
char *get_current_dir_name(void);
int chdir ( const char *path );
int fchdir ( int fd );
答案 1 :(得分:1)
如果您想要轻松,只需执行chdir(argsexec[1])
(并且您不需要单独处理'..'案例。)
当您希望它更复杂时,您必须处理符号链接。例如。当存在/lib -> /usr/lib
符号链接时,用户可能希望在cd /lib/somedir && cd ..
之后/
而不是/usr
。要处理这种情况,您必须跟踪逻辑路径并实施..
遍历。