为什么我们不能通过Linux中的system()系统调用来更改目录?

时间:2013-01-10 11:48:18

标签: c linux shell

system ("cd ..");

这不会产生任何错误,但也没有做任何有意义的事情。为什么呢?

3 个答案:

答案 0 :(得分:6)

system运行您在不同进程中传递的命令(在子shell中)。子shell改变目录并立即退出。

这一切都完全有效,但完全没用。使用chdir更改工作目录。

答案 1 :(得分:6)

system()函数创建一个fork(),创建一个进程,作为初始进程的副本。

当前目录取决于进程的环境(它存储在进程的环境变量中)。因此,当具有自己的环境的进程生成cd时,它只会影响进程,而不会影响父进程。

  • 父流程:在/ home / x / y

  • 子进程(在fork之后):in / home / x / y

在子进程中执行cd ..会将其本地环境设置为/ home / x
但父进程仍在/ home / x / y

父进程等待 child 完成system调用,然后继续执行自己的环境(当前目录)不变。

答案 2 :(得分:0)

那是因为它执行另一个shell。在这个shell中,工作目录会改变,但这对调用程序没有影响。