gpt4 book ai didi

linux - 学生 Shell - cd 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:18 29 4
gpt4 key购买 nike

我正在开发一个简单的 Linux Shell,它可以 fork() 并调用 execvp(),但我最近添加了不需要 fork() 的“内置函数”。

这是执行处理:

    if (strcmp(cmd, "exit") == 0) {
exit = 1;
}
else if (builtIn(opt) == 0){
execvp(cmd, opt);
}
else {
pid_t pID = fork();

if (pID == 0) {
execvp(cmd, opt);
} else if (pID < 0) {
printf("\nFailed to fork\n");
} else {
wait(0);
}
}

builtIn() 只是检查命令并返回 1 或 0:

int builtIn(char * opt[]) {

if (strcmp(opt[0], "cd")) {
return 1;
}
return 0;
}

最佳答案

确实需要避免 fork ,但也需要避免执行。没有程序调用改变目录的/bin/cd

不是执行某些东西,而是使用您的路径调用 chdir 系统调用。如果用户键入 cd/tmp,调用 chdir("/tmp")

当前目录每个进程的属性(作为打开的文件或 umask 值)您不能调用程序来更改当前目录,因为程序是一个不同的进程并且会有效地改变它的目录(不是你的)。这就是不存在 cd 外部命令并且必须进行系统调用来更改它的原因。

关于linux - 学生 Shell - cd 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27430642/

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