程序的工作目录如何/在哪里存储?
Posted
技术标签:
【中文标题】程序的工作目录如何/在哪里存储?【英文标题】:How/where is the working directory of a program stored? 【发布时间】:2011-04-16 10:32:51 【问题描述】:当程序访问文件、使用system()
等时,该程序的当前工作目录在物理上是如何知道/存储在哪里的?由于逻辑上程序的工作目录类似于全局变量,因此理想情况下它应该是线程局部的,尤其是在像 D 这样的语言中,“全局”变量默认是线程局部的。是否可以将程序线程的当前工作目录设为本地?
注意:如果您不特别熟悉 D,即使是与语言无关的答案也会很有用。
【问题讨论】:
【参考方案1】:当前目录由操作系统维护,而不是由语言或框架维护。详情请见description of GetCurrentDirectory WinAPI function。
来自描述:
多线程应用程序和共享 库代码不应使用 GetCurrentDirectory 函数和 应避免使用相对路径 名字。当前目录状态 由 SetCurrentDirectory 编写 函数存储为全局 每个过程中的变量,因此 多线程应用程序不能 可靠地使用这个值而不 其他可能的数据损坏 也可能正在阅读的线程或 设置这个值。
【讨论】:
+1:操作系统甚至不需要拥有当前目录。甚至根本没有目录。 “文件系统”可能是一个键/值数据库,它允许您将冒号、斜杠和反斜杠放在键中,只是为了好玩,但实际上并不关心。【参考方案2】:在 Linux 上,每个进程都由一个进程描述符 - task_struct
表示。这个结构在内核源代码的include/linux/sched.h 中定义。
task_struct
的字段之一是指向fs_struct
的指针,它存储文件系统相关信息。 fs_struct
在include/linux/fs_struct.h 中定义。
fs_struct
有一个名为pwd
的字段,它存储有关当前工作目录的信息(它所在的文件系统,以及目录本身的详细信息)。
【讨论】:
以上是关于程序的工作目录如何/在哪里存储?的主要内容,如果未能解决你的问题,请参考以下文章