system ("cd ..");
这不会产生任何错误,但也没有做任何有意义的事情。为什么呢?
答案 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中,工作目录会改变,但这对调用程序没有影响。