首先,这是我的操作系统类的作业。
所以,我在Linux中用C编写自己的shell。部分要求是使用chdir()实现cd命令。
这是我的代码段:
/**
* The way I parse the user input, argv is a char array which contains
* the command call and each additional argument is contained in succeeding
* indices in argv. E.g. 'ls -al' is contained as argv = [ ls | -al ] or
* 'ssh webserver@server.com -l username' is contained as
* argv = [ ssh | webserver@server.com | -l | username ]
*/
/* Handle cd */
if (strcmp(argv[0], "cd") == 0){
struct passwd *pwd;
char *path = argv[1];
if(path == NULL){
pwd = getpwuid(getuid());
path = pwd->pw_dir;
}
/* errno is a previously declared int */
errno = chdir(path);
if(errno != 0)
printf( "Error changing directory!\nError #: %d\nError Descriptor: %s\n", errno, strerror( errno ) );
}
发生了什么,当我在我的shell中并且我进入一个目录(例如cd / root / Public /)时,我成功地切换到目录,chdir()也返回0表示成功,但是,cd抛出以下错误:
/usr/bin/cd: line 2: cd: /root/Public/: No such file or directory
这让我感到困惑,因为chdir()成功了,当我输入pwd时,我在/ root / Public /
答案 0 :(得分:1)
感谢Etan Reisner,我找到了问题的原因。
问题是我在chdir()调用和错误处理之后没有释放该行。所以我想发布chdir()它是拿起某种垃圾还是什么?无论如何,释放这条线解决了这个问题。
另外,感谢Andrew Medico,我按照你的建议进行了修改:)