C 为什么可以';我们不能在Linux中通过system()系统调用来更改目录吗?

C 为什么可以';我们不能在Linux中通过system()系统调用来更改目录吗?,c,linux,shell,C,Linux,Shell,这不会产生任何错误,但也不会做任何有意义的事情。为什么?系统运行您在不同进程(在子shell中)中传递的命令。子shell会更改目录并立即退出 这些都是完全正确的,但毫无用处。使用chdir更改您的工作目录。system运行您在不同进程(在子shell中)中传递的命令。子shell会更改目录并立即退出 这些都是完全正确的,但毫无用处。使用chdir更改您的工作目录。函数生成一个fork(),创建一个作为初始进程副本的进程 当前目录取决于进程的环境(它存储在进程的环境变量中)。因此,当拥有自己环境

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

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


这些都是完全正确的,但毫无用处。使用
chdir
更改您的工作目录。

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

这些都是完全正确的,但毫无用处。使用
chdir
更改您的工作目录。

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

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

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

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

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

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

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

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

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

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

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


父进程等待子进程完成系统调用,然后在自己的环境(当前目录)不变的情况下继续自己的执行。

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

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

您的预期结果是什么?可能重复您的预期结果?可能重复这就是为什么
cd
通常必须是一个shell内置项才能实际更改当前shell的工作目录,而不仅仅是子shell的工作目录。这就是为什么
cd
通常必须更改的原因是一个shell内置程序,可以实际更改当前shell的工作目录,而不仅仅是子shell的工作目录。
system ("cd ..");