以编程方式更改进程的当前工作目录

标签 c linux shell

<分区>

经过一些研究,我意识到 cd 系统命令在我的系统上没有任何实现文件,特别是在 /bin/ 中。一个类项目最近需要实现一个基本的 shell 程序,该程序可以使用位于该目录中的实现文件。

因此,我的程序无法更改目录,因为 cd 不存在并且一定是其他 shell 的内部实现。

话虽如此,您将如何以编程方式更改程序的当前工作目录?

最佳答案

每个单独的进程都有其“当前目录”的概念。创建新进程时,其当前目录是其父进程的当前目录。

shell 只是另一个进程,与任何其他进程没有什么不同,除了这个特定的进程等待您键入命令,然后它作为一个新进程执行键入的命令。

现在应该很明显为什么没有任何实际的“cd”命令。说有一个。因此,您键入了“cd”命令,shell 将“cd”命令作为一个新进程执行。

新进程更改其当前目录并退出。

那么,你完成了什么?绝对没有。 shell 的当前目录没有改变。在这个假设的情况下,“cd”进程所做的只是改变它自己的当前目录,除此之外别无他法。然后它终止,一切恢复到原来的样子。

这就是为什么“cd”是内置命令。这个命令是 shell 直接执行的几个命令之一,这个命令改变了 shell 的当前目录。因此,从此 shell 启动的所有 future 进程现在都将有一个新的当前目录。

改变进程当前目录的系统调用是chdir(2) . C、Perl、Python 和几乎所有其他编程语言都有一些名为 chdir 或类似东西的函数,它执行更改进程当前目录的系统调用。

关于以编程方式更改进程的当前工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25944172/

相关文章:

通过/proc/stat 当前 CPU 核心利用率

c - 在 pic 18F4550 上启用端口 RB4 和 RB3

c - 如何去掉这个程序中的垃圾字符?

c++ - 如何通过程序发送返回(输入按钮)字符

linux - 如何通过命令行安装和设置 LDAP?

bash:在:找不到命令

c - 如何在 EOF 之前停止读取 C 文件?

linux - 如何将D中的纪元时间(unix时间戳)转换为标准时间(年月日)

linux - 在shell脚本中获取带有序列号的目录列表

shell - 如何添加一个变量来计算脚本被调用的次数?