1
system ("cd ..");

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

4

3 回答 3

6

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

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

于 2013-01-10T11:51:50.873 回答
6

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

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

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

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

在子进程中做 acd ..将其本地环境设置为 /home/x
但父进程仍在 /home/x/y

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

于 2013-01-10T11:52:09.897 回答
0

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

于 2013-01-10T11:52:14.837 回答