通过C ++程序更改shell的目录

时间:2014-02-05 15:02:58

标签: c++ linux shell directory

我正在尝试编写一个简单的C ++程序来执行Linux命令。我坚持改变目录(像chdircd这样的命令不起作用)。这就是我到目前为止所做的:

system("echo -n '1. Current Directory is '; pwd");
system("chdir Desktop");            

1 个答案:

答案 0 :(得分:4)

如果您要更改已调用程序的shell的目录(即cd,即chdir(2) ...),则无法执行此操作。因此cd必须是内置的bash(1)

原因是chdir仅影响调用进程(这将是您的C程序)而不影响父进程。每个进程都有自己的当前目录。

如果您致电system(3),它将fork(2)新的shell和execve(2) /bin/sh -c,因此只有分叉的shell才能更改其当前目录。

您需要阅读Advanced Linux Programming

也许您想直接在C程序中调用chdir。这将影响当前进程和所有未来的子进程(包括那些以C代码中的systempopen库函数开头的进程),直到它们终止或进一步调用chdir为止。但它不会影响终端中的shell(启动C程序的地方)。