使用chdir更改当前工作目录

时间:2019-11-18 15:18:47

标签: c linux linux-kernel

我正在创建一个像“ 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

我该如何解决?进入并停留在键入的目录中?

0 个答案:

没有答案