我正在创建一个像“ shell解释器”一样的程序,但是在C语言中,如果我在命令行“ change NAME”中编写,则在名为“ Bash”的主程序中,它将创建一个fork并执行execlp来调用程序“ cd”谁应该更改我的当前目录
if(strcmp(argv[0], "change"){
pid = fork();
if (pid == 0){
execlp("./cd", "./cd", argv[1], NULL);
}
它运行良好,可以运行我的程序cd,并且在理论上有所更改,但是在程序结束后,它会返回到较早的目录
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
#include <string.h>
#include <stdlib.h>
//PWD
int main(int argc, char *argv[]) {
char diratual[90], dir[90], barra[90] = "/";
char *local[argc];
local[0] = argv[1];
getcwd(diratual, sizeof(diratual));
strncat(diratual, barra, sizeof(barra));
strncat(diratual,local[0],sizeof(local[0]));
chdir(diratual);
system("pwd");
}
我使用字符串创建完整路径目标,我在整个执行后测试了程序,它返回了我输入的路径,但是当我在主程序中键入“ pwd”时,它将显示较旧的路径。 例如:
我在/ home / user / Documents
并想输入/ home / user / Documents / Test
我要输入“变更测试”
它以arg [1]的形式接收“测试”,并与程序内部字符串对齐以创建一个名为:
的字符串string =“ / home / user / Documents / Test”
之后,我使用-chdir(string);
所以最后是system(“ pwd”);返回预期的“ / home / user / Documents / Test”
但是程序结束时,它将返回到主程序
当我在主程序中键入pwd时,它显示为'/ home / user / Documents
我该如何解决?进入并停留在键入的目录中?