gpt4 book ai didi

c - C : chdir() Behaving Odd 中的 Linux Shell

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:53 25 4
gpt4 key购买 nike

首先,这是我的操作系统课的作业。

所以,我在 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 到一个目录(例如 cd/root/Public/)我成功地切换到该目录时,chdir() 也返回一个 0 表示成功,但是,cd 抛出以下错误:

/usr/bin/cd: line 2: cd: /root/Public/: No such file or directory

这让我很困惑,因为 chdir() 成功了,当我输入 pwd 时,我在/root/Public/

最佳答案

感谢 Etan Reisner,我找到了问题的原因。

问题是我在 chdir() 调用和错误处理后没有释放线路。所以我想发布 chdir() 它正在捡起某种垃圾之类的东西?无论如何,释放线路解决了问题。

另外,感谢 Andrew Medico,我按照您的建议进行了更改:)

关于c - C : chdir() Behaving Odd 中的 Linux Shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26125355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com