经过一番研究,我意识到cd
system命令在我的系统上没有任何实现文件,特别是在中/bin/
。一个类项目最近需要实现一个基本的shell程序,该程序可以利用此目录中的实现文件。
因此,我的程序无法更改目录,因为该目录cd
不存在,并且必须已由其他Shell内部执行。
话虽这么说,您将如何以编程方式更改程序的当前工作目录?
每个单独的进程都有其“当前目录”的概念。创建新进程时,其当前目录是其父进程的当前目录。
Shell只是另一个进程,与任何其他进程都没有什么不同,除了该特定进程等待您键入命令,然后将键入的命令作为新进程执行。
现在应该明白为什么没有任何实际的“ cd”命令了。说有一个。因此,您键入了“ cd”命令,并且外壳程序将“ cd”命令作为新进程执行。
新进程将更改其当前目录,然后退出。
那么,您完成了什么?绝对没有。Shell的当前目录未更改。在这种假设的情况下,“ cd”过程所要做的就是更改其自己的当前目录,而没有其他操作。然后终止,一切恢复到以前的样子。
这就是为什么“ cd”是内置命令的原因。此命令是直接由Shell执行的几个命令之一,此命令可更改Shell的当前目录。因此,从该Shell启动的所有将来的进程现在都将具有一个新的当前目录。
更改进程当前目录的系统调用是chdir(2)。C,Perl,Python和几乎所有其他编程语言在chdir或类似的地方都有一些功能,该功能执行更改进程当前目录的系统调用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句