system ("cd ..");
这不会产生任何错误,但也不会做任何有意义的事情。为什么?
system
运行您在不同进程中传递的命令(在子shell中)。该子外壳更改目录并立即退出。
这一切都完全有效,但完全没用。用于chdir
更改您的工作目录。
该system()
函数fork()
创建一个进程作为初始进程的副本。
当前目录取决于进程的环境(它存储在进程的环境变量中)。因此,当子进程拥有自己的环境时,cd
它只影响子进程,而不影响父进程。
父进程:在/home/x/y
子进程(fork 之后):在 /home/x/y
在子进程中做 acd ..
将其本地环境设置为 /home/x
但父进程仍在 /home/x/y
父进程等待子进程完成system
调用,然后继续执行其自己的环境(当前目录)不变。
那是因为它执行另一个shell。在这个 shell 中,工作目录发生了变化,但这对调用程序没有影响。