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

system ("cd .."); 

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

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

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

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

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

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

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

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

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

这完全有效,但完全没用。 使用chdir来改变你的工作目录。

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