程序如何在不使用 chdir() 的情况下更改目录?
How can a program change a directory without using chdir()?
我可以找到很多关于使用 chdir()
更改程序目录的文档(例如命令 shell)。我想知道是否有可能在不使用 chdir()
的情况下以某种方式做同样的事情。然而,我找不到任何文档或代码示例,其中有人在不使用 chdir()
的情况下更改目录。这可能吗?
在Linux中,chdir()
是一个系统调用。这意味着它不是程序在自己的内存中做的事情,而是请求 OS 内核代表程序做某事。
当然,它是可以更改目录的两个系统调用之一——另一个是 fchdir()
。理论上你可以使用另一个,尽管这是否是你的教授真正想要的是非常开放的解释。
关于为什么 chdir()
和 fchdir()
不能被应用程序重新实现但需要加以利用:当前工作目录是内核在程序的进程状态中维护的进程状态之一代表;程序本身不能在不请求内核代表它进行操作的情况下访问内核内存。
事物是系统调用,因为它们需要是系统调用——如果某事[=23=]可以在进程中完成,它would 以这种方式完成(跨越用户空间和内核空间之间的边界涉及上下文切换惩罚;这并非没有性能影响)。在这种情况下,让内核对进程的工作目录进行准确的簿记可确保在加载新的可执行文件时维护工作目录(execve()
),并有助于确保内核记录的完整性(确保程序不能假装其当前工作目录是它实际上无权访问的目录)。
我可以找到很多关于使用 chdir()
更改程序目录的文档(例如命令 shell)。我想知道是否有可能在不使用 chdir()
的情况下以某种方式做同样的事情。然而,我找不到任何文档或代码示例,其中有人在不使用 chdir()
的情况下更改目录。这可能吗?
在Linux中,chdir()
是一个系统调用。这意味着它不是程序在自己的内存中做的事情,而是请求 OS 内核代表程序做某事。
当然,它是可以更改目录的两个系统调用之一——另一个是 fchdir()
。理论上你可以使用另一个,尽管这是否是你的教授真正想要的是非常开放的解释。
关于为什么 chdir()
和 fchdir()
不能被应用程序重新实现但需要加以利用:当前工作目录是内核在程序的进程状态中维护的进程状态之一代表;程序本身不能在不请求内核代表它进行操作的情况下访问内核内存。
事物是系统调用,因为它们需要是系统调用——如果某事[=23=]可以在进程中完成,它would 以这种方式完成(跨越用户空间和内核空间之间的边界涉及上下文切换惩罚;这并非没有性能影响)。在这种情况下,让内核对进程的工作目录进行准确的簿记可确保在加载新的可执行文件时维护工作目录(execve()
),并有助于确保内核记录的完整性(确保程序不能假装其当前工作目录是它实际上无权访问的目录)。